2011-02-11 33 views
15

私のアクティビティスタックはA1B A2で、A2は上部にあります。FLAG_ACTIVITY_REORDER_TO_FRONTを使用してフロントにアクティビティを持ち込みます

A1とA2は同じアクティビティのインスタンスです.A2では、A2を終了してA1を前面に表示したいので、最後のスタックはB A1でなければなりません。どのように実装すればよいですか? A2のexecutsがある

私の現在のコードは:

 finish(); 

     intent = new Intent(this, A.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP); 
     startActivity(intent); 

上記のコードは、前にBをもたらし、最終的なスタックは、私が期待したものではありませんA1 B、です。

ありがとうございました。

答えて

13

インテントフラグを使用して欲しいものを実行することはできません。

理由はFLAG_ACTIVITY_REORDER_TO_FRONTが機能するためです。このフラグを使用すると、Androidはアクティビティスタック内の目的のアクティビティのインスタンスを検索します。スタックの先頭から順にスタックのルート/バックに移動します。指定されたアクティビティのインスタンスが見つかると、そのアクティビティのインスタンスが前面に表示されます(つまり、指定されたアクティビティのインスタンスが複数ある場合は、の最新インスタンスが前面に表示されます)。あなたのケースでは

、アクティビティスタックは次のようになります。

A1, B, A2 (front of task) 

あなたの活動Aの順序を変更しようとすると、AndroidはA2は、最初のインスタンスを検索し、タスクの前にあることを並べ替え。もちろん、それはすでにタスクの前にあったので、これは本当に何もしません。

このアクティビティでは既にfinish()と呼ばれていますが、何をするかを決定する際に現在のアクティビティを考慮しないようにしてください(これはすべて無視されます)。 Androidでは、アクティビティAの最新インスタンスとしてA2が表示され、正面に並べ替えられます。その後、A2は終了し、アクティビティBはタスクの先頭になります。ユーザーは、「B」を見て、アクティビティスタックは次のとおりです。

A1, B (front of task) 

あなたはこの記事は、ほぼ2歳以来、私はすでに別のを発見したと仮定し(所望の結果を達成するための別の方法を見つける必要があります方法)。

+4

クラスAを拡張して新しいクラスを作った。 – Kai

+0

ありがとう – Simcha

-4

startActivityを呼び出す前にfinish()を呼び出しています。あなたはすでにそれが終わった後に活動を開始するはずだとどのように考えていますか?

また、Aのどのインスタンスを前面に持ってくるかを知っているとはどういうことでしょうか?

+7

あなたは 'finish()'を呼び出して、他のアクティビティの開始を含め、作業を続けることができます。それには何も問題ありません。 'finish()'を呼んでも実際にアクティビティが終了するわけではなく、単にアクティビティを終了させることをアンドロイドに伝えます。 –

0

私のアプリでは、まったく同じ状況です。

私のソリューションは、だからあなたのスタックが次のようになります

にリダイレクト見えないスタートアップ活動、Xを、作成することでした。

X A1 B A2

任意の時点で私は、 A1に戻る必要がある場合は、FLAG_ACIVITY_CLEAR_TOPを使用してXに巻き戻し、これがAを開始します。

関連する問題