F から C へのフラグを使用してインテントを構築できintent.FLAG_ACTIVITY_CLEAR_TOP
ます。次に、インテントで startActivity() を呼び出し、これをトリガーして onBackPressed などを発生させる必要があります。
Intent i = new Intent(this, C.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i)
この回答を参照してください。これは、C に戻ったときに C が再起動されないようにすることも扱っています: https://stackoverflow.com/a/11347608/1003511
FLAG_ACTIVITY_CLEAR_TOP
スタック上のアクティビティ C の最新のインスタンスに戻り、その上にあるものをすべてクリアします。ただし、これによりアクティビティが再作成される可能性があります。アクティビティの同じインスタンスであることを確認したい場合は、FLAG_ACTIVITY_SINGLE_TOP
同様に使用してください。ドキュメントから:
上記の例で現在実行中のアクティビティ B のインスタンスは、ここで開始した新しいインテントを onNewIntent() メソッドで受け取るか、それ自体が終了して新しいインテントで再開されます。起動モードが「複数」(デフォルト) であると宣言されていて、同じインテントで FLAG_ACTIVITY_SINGLE_TOP を設定していない場合は、終了して再作成されます。他のすべての起動モードの場合、または FLAG_ACTIVITY_SINGLE_TOP が設定されている場合、このインテントは現在のインスタンスの onNewIntent() に配信されます。
編集:これは、やりたいことに似たコードサンプルです:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent a = new Intent(this, C.class);
a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(a);
return true;
}
return super.onKeyDown(keyCode, event);
}
コードサンプルソース: https://stackoverflow.com/a/9398171/1003511