ずっとstartActivity(intent)でB、C、D、、、とアクティビティの起動をいくつも重ねていってしまって問題ないのでしょうか。
これは問題があるでしょう。重ねる限り重ねられた前のアクティビティは存在しています。
私自身はAndroidでゲームの画面を作ったことがないし、その辺りの事情も詳しくはないのですが、世に出廻っているものをみると複数のアクティビティをサイクリックに表示し続けるようなケースはほとんど無いように思います。恐らくは最低限の数の画面でグラフィックやシーンを変えていくことで遷移するような動きがほとんどなのではないでしょうか。
とは言えアクティビティが例えばA→B→C→D→戻ってA...とのようにサイクリックに遷移できない訳でもありません。startActivity()
で次のアクティビティを起動するにようにした後、自分自身をfinish()
すればよいです。
以下のコード断片はボタンを押すと次の画面をstartActivity()
で起動し、自身はfinish()
で終了する例です。画面間で引き継ぐべき情報はインテントにputExtra()
で収めます。より複雑なデータであれば、インテントに収めた値をもとにPreference
を使ったりApplication Context
を介したりすればできるでしょう。
Java
1public class MainActivity1 extends AppCompatActivity {
2
3 static final String TAG = "MainActivity1";
4 private int count = 0;
5
6 @Override
7 protected void onCreate(Bundle savedInstanceState) {
8 super.onCreate(savedInstanceState);
9 setContentView(R.layout.activity_main1);
10
11 Intent intent = getIntent();
12 if (intent != null) {
13 count = intent.getIntExtra("IntValue", count);
14 }
15
16 Log.d(TAG, "MainActivity1.count:" + count);
17 Button button1 = (Button)findViewById(R.id.button1);
18
19 // ボタンのテキストに現在のcount値をセット。
20 button1.setText(String.format("MAIN1: %d", count));
21 button1.setOnClickListener(buttonClick);
22 }
23
24 private View.OnClickListener buttonClick = new View.OnClickListener() {
25 @Override
26 public void onClick(View view) {
27 // 次の画面を開く為のインテント。次の画面への値としてcountの現在値 + 1を入れておく。
28 Intent intent = new Intent(getApplicationContext(), MainActivity2.class);
29 intent.putExtra("IntValue", count + 1);
30
31 // 次のActivityを開く
32 startActivity(intent);
33
34 // 自Activityはfinish() で終了
35 finish();
36 }
37 };
繰り返しになりますがAndroidのゲームの画面切り替えについてアクティビティを用いた場合の定番の方法があったとしても私自身は知らないので、「質問者hojo2021さんのやりたいことは可能である」ことを示したに過ぎない回答です。
※この回答を読んでAndroidのゲームの開発が得意な方の意見を引き出せれば尚良い、との期待もあります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/25 08:01
2021/09/25 08:24
2021/09/25 09:05
2021/09/25 09:14 編集
2022/02/05 10:35