元の画面(MainActivity.java)に戻るときに
startActivity は「戻る」処理ではありません。あくまで指定したアクティビティを起動するメソッドです。
startActivity を実行する度に新たなインスタンスが作られ、古いアクティビティは残ったままメモリを圧迫し続けることになるのではないでしょうか。
アクティビティを実行し、その終了を待って処理を続ける方法があります(以前は startActivityForResult でしたが Deprecated になりまして、 androidx で registerForActivityResult を使うようになったようです)ので、そちらを用いれば、指定したアクティビティの終了後に必要なメソッドを実行することが出来るのでは…と思います。
MainActivity.java
java
1package com.teratail.q361159;
2
3import android.app.Activity;
4import android.content.Intent;
5import android.os.Bundle;
6import android.util.Log;
7import android.widget.Button;
8
9import androidx.activity.result.ActivityResultLauncher;
10import androidx.activity.result.contract.ActivityResultContracts;
11import androidx.appcompat.app.AppCompatActivity;
12
13public class MainActivity extends AppCompatActivity {
14 private static final String TAG = "MainActivity";
15
16 private int score = 123;
17
18 private ActivityResultLauncher<Intent> startForResult = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result->{
19 switch(result.getResultCode()) {
20 case Activity.RESULT_OK:
21 //Activity から戻って必要なメソッドを呼ぶ
22 //Intent intent = result.getData();
23 Log.d(TAG, "ActivityResultLauncher result="+result);
24 break;
25 case ResultActivity.RESULT_OWARU:
26 Log.d(TAG, "ActivityResultLauncher OWARU");
27 finish();
28 break;
29 }
30 });
31
32 @Override
33 protected void onCreate(Bundle savedInstanceState) {
34 super.onCreate(savedInstanceState);
35 setContentView(R.layout.activity_main);
36
37 Button button = findViewById(R.id.button);
38 button.setOnClickListener(v -> {
39 //保存画面へ
40 startForResult.launch(new Intent(this, ResultActivity.class)
41 .putExtra(ResultActivity.PARAM_SCORE, score));
42 });
43 }
44}
レイアウト: activity_main.xml
xml
1<?xml version="1.0" encoding="utf-8"?>
2<androidx.constraintlayout.widget.ConstraintLayout
3 xmlns:android="http://schemas.android.com/apk/res/android"
4 xmlns:app="http://schemas.android.com/apk/res-auto"
5 xmlns:tools="http://schemas.android.com/tools"
6 android:layout_width="match_parent"
7 android:layout_height="match_parent"
8 tools:context=".MainActivity">
9
10 <Button
11 android:id="@+id/button"
12 android:layout_width="wrap_content"
13 android:layout_height="wrap_content"
14 android:text="Hello World!"
15 app:layout_constraintBottom_toBottomOf="parent"
16 app:layout_constraintLeft_toLeftOf="parent"
17 app:layout_constraintRight_toRightOf="parent"
18 app:layout_constraintTop_toTopOf="parent" />
19
20</androidx.constraintlayout.widget.ConstraintLayout>
ResultActivity.java
java
1package com.teratail.q361159;
2
3import android.app.Activity;
4import android.content.SharedPreferences;
5import android.os.Bundle;
6import android.widget.*;
7
8import androidx.appcompat.app.AppCompatActivity;
9
10public class ResultActivity extends AppCompatActivity {
11 public static final String PARAM_SCORE = "SCORE";
12 public static final int RESULT_OWARU = Activity.RESULT_FIRST_USER;
13
14 public static final String SHARED_NAME = "GAME_DATA";
15 public static final String KEY_HIGHSCORE = "HIGH_SCORE";
16
17 @Override
18 protected void onCreate(Bundle savedInstanceState) {
19 super.onCreate(savedInstanceState);
20 setContentView(R.layout.activity_result);
21
22 TextView scoreLabel = findViewById(R.id.scoreLabel);
23 TextView highScoreLabel = findViewById(R.id.highScoreLabel);
24 Button bt_mouitido = findViewById(R.id.bt_mouitido);
25 Button bt_hozon = findViewById(R.id.bt_hozon);
26 Button bt_owaru = findViewById(R.id.bt_owaru);
27
28 int score = getIntent().getIntExtra(PARAM_SCORE, 0);
29 scoreLabel.setText(score + "");
30
31 SharedPreferences sharedPreferences = getSharedPreferences(SHARED_NAME, MODE_PRIVATE);
32 int highScore = sharedPreferences.getInt(KEY_HIGHSCORE, 0);
33
34 highScoreLabel.setText("High Score : " + Math.max(highScore, score));
35
36 bt_mouitido.setOnClickListener(v->{
37 setResult(Activity.RESULT_OK, null);
38 finish();
39 });
40
41 bt_hozon.setEnabled(highScore < score);
42
43 bt_hozon.setOnClickListener(v->{
44 SharedPreferences.Editor editor = sharedPreferences.edit();
45 editor.putInt(KEY_HIGHSCORE, score);
46 editor.apply();
47 bt_hozon.setEnabled(false);
48 });
49
50 bt_owaru.setOnClickListener(v->{
51 setResult(RESULT_OWARU, null);
52 finish();
53 });
54 }
55}
レイアウト: activity_result.xml
xml
1<?xml version="1.0" encoding="utf-8"?>
2<androidx.constraintlayout.widget.ConstraintLayout
3 xmlns:android="http://schemas.android.com/apk/res/android"
4 xmlns:app="http://schemas.android.com/apk/res-auto"
5 xmlns:tools="http://schemas.android.com/tools"
6 android:layout_width="match_parent"
7 android:layout_height="match_parent"
8 tools:context=".ResultActivity">
9
10 <TextView
11 android:id="@+id/scoreLabel"
12 android:layout_width="wrap_content"
13 android:layout_height="wrap_content"
14 android:text="0"
15 app:layout_constraintBottom_toTopOf="@id/highScoreLabel"
16 app:layout_constraintLeft_toLeftOf="parent"
17 app:layout_constraintRight_toRightOf="parent"
18 app:layout_constraintTop_toTopOf="parent" />
19
20 <TextView
21 android:id="@+id/highScoreLabel"
22 android:layout_width="wrap_content"
23 android:layout_height="wrap_content"
24 android:text="0"
25 app:layout_constraintBottom_toTopOf="@id/bt_mouitido"
26 app:layout_constraintLeft_toLeftOf="parent"
27 app:layout_constraintRight_toRightOf="parent"
28 app:layout_constraintTop_toBottomOf="@id/scoreLabel" />
29
30 <Button
31 android:id="@+id/bt_mouitido"
32 android:layout_width="wrap_content"
33 android:layout_height="wrap_content"
34 android:text="もう一度"
35 app:layout_constraintBottom_toTopOf="@id/bt_hozon"
36 app:layout_constraintLeft_toLeftOf="parent"
37 app:layout_constraintRight_toRightOf="parent"
38 app:layout_constraintTop_toBottomOf="@id/highScoreLabel" />
39 <Button
40 android:id="@+id/bt_hozon"
41 android:layout_width="wrap_content"
42 android:layout_height="wrap_content"
43 android:text="保存"
44 app:layout_constraintBottom_toTopOf="@id/bt_owaru"
45 app:layout_constraintLeft_toLeftOf="parent"
46 app:layout_constraintRight_toRightOf="parent"
47 app:layout_constraintTop_toBottomOf="@id/bt_mouitido" />
48 <Button
49 android:id="@+id/bt_owaru"
50 android:layout_width="wrap_content"
51 android:layout_height="wrap_content"
52 android:text="終わる"
53 app:layout_constraintBottom_toBottomOf="parent"
54 app:layout_constraintLeft_toLeftOf="parent"
55 app:layout_constraintRight_toRightOf="parent"
56 app:layout_constraintTop_toBottomOf="@id/bt_hozon" />
57
58</androidx.constraintlayout.widget.ConstraintLayout>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/25 11:13
2021/09/25 12:00 編集
2021/09/26 02:48
2021/09/26 03:43
2021/09/26 06:26 編集
2021/09/26 11:52