1

次のフローのアプリがあります (同じアプリ内のすべてのアクティビティ):

  • アクティビティ A は でアクティビティ B を開始しstartActivityます。ブール値の "autoContinue"=true エクストラを追加する場合があります。
  • アクティビティ B が開始されると、 で「autoContinue」フラグがチェックさonCreategetIntent().hasExtra("autoContinue")ます。フラグが true の場合、すぐに でアクティビティ C を開始しstartActivityます。

これで、アクティビティ C で戻るボタンを押すための 2 つのシナリオができました。

  • アクティビティ B がまだアクティビティ スタックにあり、破棄されていない場合は、すべて問題ありません。アクティビティ C が閉じ、アクティビティ B が表示されます。
  • ホームボタンを押してアクティビティ C を終了し、アクティビティ C に戻る前に他のことをすると、アクティビティ B が破棄されることがよくあります。アクティビティ C で戻るボタンを押すと、"autoContinue"=true のインテントでアクティビティ B が作成され、すぐにアクティビティ C が再び開始されます。

アクティビティ B のインテントからフラグを削除しようとしましたonCreateが、うまくいきません:

final Intent intent = getIntent();
final Bundle extras = intent.getExtras();
if (extras.containsKey("autoContinue")) {
    intent.removeExtra("autoContinue");
    continue();
}

アクティビティ C から戻るときに、インテント エクストラから "autoContinue"=true フラグを削除するにはどうすればよいですか?

4

2 に答える 2

4

インテントから余分なものを削除するという正しい方向に進んでいます。ただし、Intent関連付けられている にはActivityまだ余分なものがあります。setIntent()余分なものを取り除いてから電話する必要があります。したがって、コードは次のようになります。

final Intent intent = getIntent();
final Bundle extras = intent.getExtras();
if (extras.containsKey("autoContinue")) {
    intent.removeExtra("autoContinue");
    setIntent(intent);
    continue();
}
于 2016-02-27T11:41:34.313 に答える
-1

メソッドでアクティビティを開始した場合、終了時に前のアクティビティにエクストラを渡すことができますstartActivityForResult。次のコード例を参照してください。

public void finishActivity() {
        Intent returnIntent = new Intent();
        returnIntent.putExtra("KEY", "Value");
        getActivity().setResult(Activity.RESULT_OK, returnIntent);
        getActivity().finish();    
}

また、キーをハードコーディングしないことをお勧めします。このトピックについて私が書いたブログ記事を読んでください。

于 2016-02-27T11:43:55.307 に答える