2016-08-23 11 views
0

現在だから Androidで正しくフラグメントをポップする方法は?

+-> Activity1 
|  -> FragmentA 
|  -> FragmentB -+ 
|      | 
+- Activity2 <-------+ 

を設定Activity1はFragmentAを開き、FragmentBはActivity2が開きます。 その後、Activity2が終了するとActivity1に戻ります( OnCreate、ただいま OnActivityResult)。

私はActivity2に行くときにFragmentAとFragmentBを殺したいと思っていますが、私がそれをするとあまりにも速くポップされ、Activity2が表示される前に自分のActivity1が分割されているのが見えます。

---私はを試してみました何---

私はActivity2に断片を殺そうとしたが、私はActivity2から1に戻ってきたときに、今、それはあまりにも遅いですので、私は破片が周囲に長引く見ることができます。

現在唯一の作業溶液をpostDelayedハンドラにクリア方法を入れていますが、

が---なぜActivity2からそれを殺す十分でないどのくらいの遅延を知ることはできませんので、私はこのソリューションを好きではないのですか? ---

私はいくつかの希望で試しましたが、fragmentManagerは別のアクティビティ内でバックスタックをポップすることを許可しないため、java.lang.IllegalStateException: Can not perform this action after onSaveInstanceStateをスローします。

提案がありますか?

ありがとう!

答えて

0

私はだから今Activity1a

の下で、それらの断片を移動することによってそれを解決し、この

+-> Activity1 --------+ 
|      | 
| Activity1a <------+ 
| | -> FragmentA 
| | -> FragmentB 
| +-----------------------+ 
|       | 
+-- Activity2 <------------+ 

Activity1aは、今私はに移行したい場合はFragmentAとBに上保持している目に見えない活動であるように見えますActivity2、今度はActivity1aからfinish()にするだけで、Activity1aに添付されているすべてのフラグメントはなくなります。 Androidの公式文書から

https://developer.android.com/guide/components/fragments.html

フラグメントは、常に活動に埋め込まれなければならないとフラグメントのライフサイクルは、直接ホスト・アクティビティのライフサイクルの影響を受けています。たとえば、アクティビティが一時停止されている場合は、その中のすべてのフラグメントも停止し、アクティビティが破棄されると、すべてのフラグメントも破棄されます。

この問題を解決しました。私はちょうどonBackPressed()のようなコーナーケースを扱う必要がありました。

関連する問題