finish()で消去せず画面遷移する方法
3つ分の画面を作る
参考⇒AndroidStudio 画面の追加と遷移(消去) 画面の追加
今回はMainActivity、MainActivity2、MainActivity3で作成してます
ボタンとかテキストビューの名前やidは各自で好きに付けて下さい
参考⇒ボタンオブジェクトの取得
それぞれに遷移用のボタンを設置する(例)
遷移用のコードを追記する
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);
スタックに同じアクティビティがすでに存在する場合、
そのアクティビティが再利用され、最前面に移動
存在しない場合は新たに作られる
イメージ
今回はこのページを先頭に持ってくる処理を繰り返して
表示を切り替えているように見せている
ページの指定は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を格納する
参考⇒画面を遷移させる処理
これで、画面遷移(使いまわし)ができた