この重複する問題をテストするサンプル アプリを作成しました。
フラグメント タイプ Fragment1 があり、Fragment1 の新しいインスタンスを作成し、実行時にアクティビティの FrameLayout に追加します。いくつかのボタンを使用してフラグメントを追加します。
注: Fragment1 の新しいインスタンスごとに異なる番号 (#1、#2、#3 など) を UI に表示して、表示しているフラグメントを把握できるようにしました。
だから..これが私がすることです:
- ボタン 3 をクリックし、Fragment1 の新しいインスタンスを作成して Frame1 に追加します。
- ボタン 4 をクリックし、Fragment1 の新しいインスタンスを作成して Frame1 に追加し、フラグメント バックスタックに追加します。
- 1と2を繰り返します。
- 1と2を繰り返します。
これで、1(#1)、2(#2)、1(#3)、2(#4)、1(#5)、2(#6) の順序でフラグメントができました。
フラグメント #6 を表示しているときに戻るキーを押します。
- 戻るキーを押すと、UI が表示されます (#5)。
- 戻るキーの押下、UI 表示 (#3 および #5)、
- 戻るキーを押すと、UI が表示されます (#1、#3、および #5)
フラグメントが互いの上に表示されているようです。
なぜ?重複する問題はありますか?この重複する問題を解決するにはどうすればよいですか。これは互換性ライブラリの問題だと思っていましたが、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();
}