EDITソリューション:なんらかの理由で、私はアクティビティ2と3をNEW_TASKフラグでも起動しました。APIのNEW_TASKとCLEAR_TASKでスタックをクリアできません15
元の質問: 私は検索し、完全にスタックをバッククリアする方法については、複数の答えを見つけましたが、複数の異なるソリューションを試した後、私はまだ苦労していました。私の問題を明確にするために、私は3つのアクティビティを持っています。アクティビティ1がメインアクティビティで、いつでもアクティビティ2または3のツールバーの上ボタンをクリックしてアクティビティ1に戻ることができます。アクティビティ1で完全にクリアされ、「スクラッチからスタート」します。アクティビティ2は、バックスタックに複数のバージョンを持つこともできます。ですから、例えば:
1> 2> 2> 3(アップボタンをクリックします)1
または
1> 2> 2> 2(アップボタンをクリックします)1
すべての答え基本的に同じことを言っていることがわかりました。これは、アクティビティ1を起動するときにFLAG_ACTIVITY_NEW_TASKとFLAG_ACTIVITY_CLEAR_TASKを使用することです。アクティビティを開始した後でfinish()
の使用を指摘した人もいます。だから私のコードは次のようになります:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
break;
case R.id.action_homepage:
openHomepage();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
私は期待どおりのアクティビティ1に戻ります。しかし、戻るボタンをクリックすると、私はアクティビティ2に戻ります。つまり、スタックはクリアされませんでした。
これは、アクティビティ1,2および3がすべて拡張するカスタムBaseActivity
で実装されています。ただし、「開始点」であるため、アクティビティ1では上ボタンがオフになっています。また、マニフェストファイルにandroid:launchMode="singleTask"
を追加し、CLEAR_TOPフラグを使用してこれらを組み合わせることも試みました。
なぜこれが私にとってうまくいかないのですか?活動2と3には、これが機能するための特定のフラグが必要ですか?
これは**戻るボタン**ではなく**戻るボタン**に適用されます。これをアクティビティ2とアクティビティ3に追加すると、アクティビティ2をブラウズするときに戻ることができません。アクティビティ3からアクティビティ3に戻って2に戻ります。最後に、finishAffinity();を追加します。ホームボタンのonOptionsItemSelectedの 'startActivity()'ビットが違いをもたらさない場合、前と同じ結果が得られます。 – blae