7

以下のナビゲーションに完全に同意します

ここに画像の説明を入力

Book の詳細が BookDetailActivity のさまざまなインスタンスで作成されると想像してください。

book2 の詳細を押し上げる前のスタックは次のとおりです。

  • BookDetailActivity (Book 2 - あなたはここにいます)
  • BookDetailActivity (ブック 1)
  • すべての書籍のアクティビティ

ガイドラインに従う場合は、次を使用します。

     Intent parentActivityIntent = new Intent(this, AllBooksActivity.class);
        parentActivityIntent.addFlags(
                Intent.FLAG_ACTIVITY_CLEAR_TOP |
                Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(parentActivityIntent);
        finish();

しかし、このコードの大きな問題は、BookDetailActivity (Book 1) がまだ生きていることです!

「up」後に戻るボタンを押すと、Book 1 の詳細が表示されます。

元のアクティビティと押し上げたアクティビティのBookDetailActivity間にあるものをすべて削除するにはどうすればよいですか?AllBooksActivity

4

2 に答える 2

5

関連するガイドラインの記事では、次の点に注意してください。

実装に関する注意: ベスト プラクティスとして、Home または Up のいずれかを実装する場合は、子孫画面のバック スタックを必ずクリアしてください。ホームの場合、バック スタックに残っている唯一の画面はホーム画面である必要があります。Up ナビゲーションの場合、Back が画面階層間を移動しない限り、現在の画面をバック スタックから削除する必要があります。FLAG_ACTIVITY_CLEAR_TOP および FLAG_ACTIVITY_NEW_TASK インテント フラグを一緒に使用して、これを実現できます。

あなたがそうしているので、 BookDetailActivity1 は FLAG_ACTIVITY_CLEAR_TOP によって閉じられるべきです。アクティブで、[戻る] を押したときに表示される唯一の方法は、AllBooksActivity の前に開始された場合です。

FLAG_ACTIVITY_NEW_TASKを必要としないことについては( Android開発者の回答で提案):

このフラグを使用する場合、開始しようとしているアクティビティに対してタスクが既に実行されている場合、新しいアクティビティは開始されません。代わりに、現在のタスクが前回の状態で画面の前面に表示されます。

...そのため、アクティビティが存在する場合、新しいタスクは開始されません。

于 2013-01-04T07:43:56.777 に答える
1

わかりました、そのようなことを行うには複数の方法があります。ここにそれらの1つがあります:

ただし、最初のアクティビティを新しいアクティビティとして開くのではなく、現在のアクティビティとその前のアクティビティを終了することをお勧めします。

これを行うには、startActivityForResult を使用して新しい各アクティビティを呼び出し、各アクティビティの結果を、最初のアクティビティに戻りたいという値に設定します。

値をクラスの正規名に設定し、これらのリクエストをすべて自動的に処理する基本アクティビティを作成して、処理する必要がないようにすることもできます。

いずれにせよ、新しいタスクを作成するため、 Intent.FLAG_ACTIVITY_NEW_TASK を使用して間違いを犯したと思うので、前のタスクがまだ存在しています。詳細については、利用可能なインテント フラグを読んでみてください: http://developer.android.com/reference/android/content/Intent.html

于 2012-12-29T15:20:54.973 に答える