2

シナリオは次のとおりです。

  1. アクティビティには、投稿を実行して実行することで戻るAアクティビティを呼び出す「Twitterへの投稿」オプションがあり、フローはBAActivity#finish()A->B->A
  2. ただし、Twitterにログインしていない場合、BアクティビティはブラウザのTwitterモバイルOAuthページを呼び出します。次に、ブラウザはユーザーをにリダイレクトしますB。ただし、B完了して電話をかけるActivity#finish()と、スタックが現在の状態になっているため、予想されるブラウザのログインページに戻りますA->B->browser->B

1つではなく3つ戻るにはどうすればよいですか?それも可能ですか?A少なくともリストの位置を失うので、私は新たに電話をかけたくありません

4

1 に答える 1

2

これは、FLAG_ACTIVITY_CLEAR_TOPおよびFLAG_ACTIVITY_SINGLE_TOPを使用して実行できます。

新しいインテントとしてAを起動する必要がありますが、呼び出す前にこれら2つのフラグを設定してくださいstartActivity

Clear Topを使用すると、Aの上にあるすべてのアクティビティがクリアされます。

シングルトップをonNewIntent使用すると、Aを破棄して再作成するのではなく、インテントがAのメソッドに配信されます。

ドキュメントから:

設定されていて、起動中のアクティビティが現在のタスクですでに実行されている場合、そのアクティビティの新しいインスタンスを起動する代わりに、その上にある他のすべてのアクティビティが閉じられ、このインテントが(現在top)新しいインテントとしての古いアクティビティ。たとえば、アクティビティA、B、C、Dで構成されるタスクについて考えてみます。DがアクティビティBのコンポーネントに解決されるインテントでstartActivity()を呼び出すと、CとDは終了し、Bは指定されたインテントを受け取ります。 、結果としてスタックは次のようになります:A、B。上記の例で現在実行中のアクティビティBのインスタンスは、onNewIntent()メソッドでここから開始する新しいインテントを受け取るか、それ自体が終了して新しいインテントで再起動します。 。起動モードが「複数」であると宣言した場合 (デフォルト)同じインテントでFLAG_ACTIVITY_SINGLE_TOPを設定していない場合、FLAG_ACTIVITY_SINGLE_TOPは終了し、再作成されます。他のすべての起動モードの場合、またはFLAG_ACTIVITY_SINGLE_TOPが設定されている場合、このインテントは現在のインスタンスのonNewIntent()に配信されます。この起動モードは、FLAG_ACTIVITY_NEW_TASKと組み合わせて効果的に使用することもできます。タスクのルートアクティビティを開始するために使用すると、そのタスクの現在実行中のインスタンスがフォアグラウンドになり、ルート状態にクリアされます。これは、たとえば、通知マネージャーからアクティビティを起動する場合に特に便利です。タスクの詳細については、「タスクとバックスタック」を参照してください。他のすべての起動モードの場合、またはFLAG_ACTIVITY_SINGLE_TOPが設定されている場合、このインテントは現在のインスタンスのonNewIntent()に配信されます。この起動モードは、FLAG_ACTIVITY_NEW_TASKと組み合わせて効果的に使用することもできます。タスクのルートアクティビティを開始するために使用すると、そのタスクの現在実行中のインスタンスがフォアグラウンドになり、ルート状態にクリアされます。これは、たとえば、通知マネージャーからアクティビティを起動する場合に特に便利です。タスクの詳細については、「タスクとバックスタック」を参照してください。他のすべての起動モードの場合、またはFLAG_ACTIVITY_SINGLE_TOPが設定されている場合、このインテントは現在のインスタンスのonNewIntent()に配信されます。この起動モードは、FLAG_ACTIVITY_NEW_TASKと組み合わせて効果的に使用することもできます。タスクのルートアクティビティを開始するために使用すると、そのタスクの現在実行中のインスタンスがフォアグラウンドになり、ルート状態にクリアされます。これは、たとえば、通知マネージャーからアクティビティを起動する場合に特に便利です。タスクの詳細については、「タスクとバックスタック」を参照してください。これは、たとえば、通知マネージャーからアクティビティを起動する場合に特に便利です。タスクの詳細については、「タスクとバックスタック」を参照してください。これは、たとえば、通知マネージャーからアクティビティを起動する場合に特に便利です。タスクの詳細については、「タスクとバックスタック」を参照してください。

于 2011-12-13T06:18:39.010 に答える