重複する問題をテストするサンプルアプリケーションを作成しました。フラグメントをポップバックするとフラグメントが重複して表示される
私はフラグメントタイプFragment1を持っており、私はFragment1の新しいインスタンスを作成し、それを実行時のアクティビティのFrameLayoutに追加します。私はいくつかのボタンの助けを借りてフラグメントを追加します。
注:私は、表示しているフラグメントを把握するのに役立つように、Fragment1の新しいインスタンスごとに異なる番号(#1、#2、#3など)をUIに表示しました。
..だから、ここでは、私が何をすべきかです:
- は、ボタン3をクリックしてFragment1の新しいインスタンスを作成し、フレーム1に追加します。
- ボタン4をクリックし、Fragment1の新しいインスタンスを作成し、それをFrame1に追加して、フラグメントのバックスタックに追加します。
- 繰り返し1と2
- 繰り返し1と2
今、私はこの順序で断片を持っている:1(#1)、2(#2)、1(#3)、2 (#4)、1(#5)、2(#6)である。
フラグメント#6を表示しているときに戻るキーを押します。
- 戻るキーを押すと、UIが表示されます(#5)。フラグメントはON表示なっているようだ
- 戻るキーを押して、UIが表示されます(#3、#5)、
- 戻るキーを押して、UIが表示されます(#1、#3、#5)
お互いのTOP。
なぜですか?重複する問題はありますか?この重複する問題を解決するにはどうすればよいですか。私はこれが互換性ライブラリの問題だと思っていました...しかし、3.0上にもあります。断片を追加するための
コード:
public int doFragmentChange(int cont1, Fragment frag1, String tag1, int cont2, Fragment frag2, String tag2,
boolean addToStack, String stackTag) {
FragmentManager fm = getFragmentManager();// getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
if (frag1 != null) {
ft.replace(cont1, frag1, tag1);
}
if (frag2 != null) {
ft.replace(cont2, frag2, tag2);
}
// add fragment to stack
if (addToStack)
ft.addToBackStack(stackTag);
return ft.commit();
}
私はコミットごとに2つの追加の呼び出しがないことがわかります。私のそばでは同じ重なり合う振る舞いに直面していた。 http://stackoverflow.com/questions/14269350/how-to-keep-only-first-initial-fragment-in-back-stak-fragment-overlapping – Arvis