0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AndroidStudio 画面の追加と遷移(使いまわす)

Last updated at Posted at 2024-12-22

finish()で消去せず画面遷移する方法

イメージ

3ページ分の画面遷移をするが、finish()を使わずに行う
携帯.gif

3つ分の画面を作る

参考⇒AndroidStudio 画面の追加と遷移(消去) 画面の追加

今回はMainActivity、MainActivity2、MainActivity3で作成してます
ボタンとかテキストビューの名前やidは各自で好きに付けて下さい

参考⇒ボタンオブジェクトの取得


それぞれに遷移用のボタンを設置する(例)
image.png

image.png

image.png

遷移用のコードを追記する

MainActivity.java

MainActivity.java
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });
        //ボタンを押した+++++++
        Button button = findViewById(R.id.btNext1);
        button.setOnClickListener(new ButtonClickListener());
        //++++++++++++++
    }
    //処理+++++++++++
    private class ButtonClickListener implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, MainActivity2.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
            startActivity(intent);
        }
    }
    //+++++++++++++
}

MainActivity2.java

MainActivity2.java
public class MainActivity2 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main2);
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });
        //ボタンを押した+++++++
        Button btNext = findViewById(R.id.btNext1);
        Button btBack = findViewById(R.id.btBack1);
        btNext.setOnClickListener(new ButtonClickListener());
        btBack.setOnClickListener(new ButtonClickListener());
        //++++++++++++++
    }

    //処理+++++++++++
    private class ButtonClickListener implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            Class<?> cls;
            if(v.getId() == R.id.btNext1){
                cls = MainActivity3.class;
            } else {
                cls = MainActivity.class;
            }
            Intent intent = new Intent(MainActivity2.this, cls);
            intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
            startActivity(intent);
        }
    }
    //+++++++++++++
}

MainActivity3.java

MainActivity3.java
public class MainActivity2 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main2);
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });
        //ボタンを押した+++++++
        Button btBack1 = findViewById(R.id.btBack1);
        Button btBack2 = findViewById(R.id.btBack2);
        btNext.setOnClickListener(new ButtonClickListener());
        btBack.setOnClickListener(new ButtonClickListener());
        //++++++++++++++
    }

    //処理+++++++++++
    private class ButtonClickListener implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            Class<?> cls;
            if(v.getId() == R.id.btBack1){
                cls = MainActivity.class;
            } else {
                cls = MainActivity2.class;
            }
            Intent intent = new Intent(MainActivity2.this, cls);
            intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
            startActivity(intent);
        }
    }
    //+++++++++++++
}

setFlags()について

private class ButtonClickListener内の処理の一部
    //処理+++++++++++
    private class ButtonClickListener implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, MainActivity2.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
            startActivity(intent);
        }
    }
    //+++++++++++++
  • intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    スタックに同じアクティビティがすでに存在する場合、
    そのアクティビティが再利用され、最前面に移動
    存在しない場合は新たに作られる

イメージ
image.png
今回はこのページを先頭に持ってくる処理を繰り返して
表示を切り替えているように見せている

ページの指定はIntentをnewした時のコンストラクタで行う
参考⇒画面を遷移させる処理

Class<?> cls について

MainActivity2.javaとMainActivity3.javaにいるこいつ ↓

これは MainActivity3.java 内のやつ
Class<?> cls;
if(v.getId() == R.id.btBack1){
    cls = MainActivity.class;
} else {
    cls = MainActivity2.class;
}
Intent intent = new Intent(MainActivity2.this, cls);
  • Class<?> cls;
    Intent intent = new Intent(MainActivity2.this, ここで使う);
    new Intentの第2引数で使う
  • if(v.getId() == R.id.btBack1){
      cls = MainActivity.class;
    } else {
      cls = MainActivity2.class;
    }

    ここで押したボタンのidを識別し
    上で作成した変数cls(移動先)へclsを格納する

参考⇒画面を遷移させる処理

これで、画面遷移(使いまわし)ができた

処理の流れ

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?