6

新しい Activity インテントを開始するときにバックスタックをクリアしたい。

私の問題の正確なケースは次のとおりです。次のようなアクティビティがあります A > B > C > D > E 「A」は登録アクティビティで、「B」は登録アクティビティの確認です。ユーザーがアクティビティ「A」に戻ることができないアクティビティ「B」を開始したとき、またユーザーがアクティビティ「C」に到達したときに、アクティビティ「A」と「B」の両方が役に立たないことを望んでいます。ユーザーはもう彼らに戻ります。

また、ユーザーが「C」からアクティビティ「D」に移動すると、「C」に戻ることができますが、さらに「E」アクティビティに移動すると、前の「C」または「D」のいずれにも戻ることができません。 」の活動。

多くの調査の後、私が得た最善の方法は flag: FLAG_ACTIVITY_NO_HISTORYを使用することですが、私の場合は2つの問題があります:

  1. アクティビティ「A」で、ユーザーがアプリケーションから (ホーム画面などに) 移動すると、そのアクティビティが破棄されるため、ユーザーが入力したすべての情報が失われます。
  2. アクティビティ「C」ユーザーが「D」アクティビティに移動しているときに履歴(バックスタック)に保持したいが、ユーザーが「E」アクティビティに移動したときにそれを削除したい。

今までこの問題の解決策を見つけることができませんでした。現在のタスクのバックスタックをクリアする何かがあれば簡単だと思います!

私の最小 SDK サポートは 5 です。

前もって感謝します。

4

1 に答える 1

8

API レベル 11 以降を使用している場合は、インテントにFLAG_ACTIVITY_CLEAR_TASKを追加するだけで、タスク内の他のすべてのアクティビティがクリアされます。

古い SDK ( FLAG_ACTIVITY_CLEAR_TASK がない) で完全な Android アクティビティ スタックをクリアする

もう 1 つの方法は、ユーザーに戻してほしくないアクティビティを終了することです。たとえば、B に移動する前に ActivityA.finish() を呼び出すと、アクティビティはタスクから削除されます。

アクティビティ D を開始するときは、C から startActivityForResult() を使用して開始できます。D を閉じるときは、結果を C に送信し、アクティビティ C を終了してから E に移動します。

于 2012-10-24T16:09:23.047 に答える