その内容だと、Androidのスタック管理の機能だけでは解決できなさそうですね。
一つの案ですが、C→Dという処理のときに最初のActivity(A)を開くように記述して、その際に「これはCから戻ってきた処理である」ことがわかるフラグをセットして判別してみてはどうでしょうか。AのonCreate()では、そのフラグの内容によってsetContentView()でセットするレイアウトをAのものにするか、Dのものにするか振り分けます。
クラスは3画面分、レイアウトXMLは4画面分用意しておくということです。
CからAに戻るときには前回と同じようにIntent.FLAG_ACTIVITY_CLEAR_TOPをセットしておけばスタックの中身は破棄されますので、新たに開かれたA(画面内容はD)から戻ればアプリは即閉じられます。
ActivityA.java
public class ActivityA extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
boolean d = intent.getBooleanExtra("D", false);
// Cから戻ってきた処理であるか否かで振り分け
if (d == false) {
setContentView(R.layout.activity_a); // Aのレイアウトを描画
// Aを開くときの初期処理
} else {
setContentView(R.layout.activity_d); // Dのレイアウトを描画
// Dを開く時の初期処理
}
}
}
ActivityC.java
// ここからDを開く処理
Intent intent = new Intent(this, ActivityA.class);
intent.setFlags(
Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("D", true); // フラグをセット
startActivity(intent);
ActivityA.javaの記述がちょっと複雑になってしまうのが問題でしょうかね。
他にもアイディアはあるかもしれないけど。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。