9

重複する問題をテストするサンプルアプリケーションを作成しました。フラグメントをポップバックするとフラグメントが重複して表示される

私はフラグメントタイプFragment1を持っており、私はFragment1の新しいインスタンスを作成し、それを実行時のアクティビティのFrameLayoutに追加します。私はいくつかのボタンの助けを借りてフラグメントを追加します。

注:私は、表示しているフラグメントを把握するのに役立つように、Fragment1の新しいインスタンスごとに異なる番号(#1、#2、#3など)をUIに表示しました。

..だから、ここでは、私が何をすべきかです:

  1. は、ボタン3をクリックしてFragment1の新しいインスタンスを作成し、フレーム1に追加します。
  2. ボタン4をクリックし、Fragment1の新しいインスタンスを作成し、それをFrame1に追加して、フラグメントのバックスタックに追加します。
  3. 繰り返し1と2
  4. 繰り返し1と2

今、私はこの順序で断片を持っている:1(#1)、2(#2)、1(#3)、2 (#4)、1(#5)、2(#6)である。

フラグメント#6を表示しているときに戻るキーを押します。

  1. 戻るキーを押すと、UIが表示されます(#5)。フラグメントはON表示なっているようだ
  2. 戻るキーを押して、UIが表示されます(#3、#5)、
  3. 戻るキーを押して、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(); 
    } 

答えて

1

あなたは2つのaddのコール他(2つのcommit呼び出し)後のいずれかを実行した場合は[はいフラグメントは効果的に、互いに上下に重ねて表示されます。

つまり、frag1をfrag2に置き換え、次にfrag3を同じフレーム内でbackstackトランザクションなしに置き換えると、frag2とfrag4がオーバーレイされることになります。

また、replaceのチェーンに潜在的な問題もあります。それぞれ別々のcommitを呼び出す必要があります。 Android — Replace Fragment Back Stack With New Stack?を参照してください。

+1

私はコミットごとに2つの追加の呼び出しがないことがわかります。私のそばでは同じ重なり合う振る舞いに直面していた。 http://stackoverflow.com/questions/14269350/how-to-keep-only-first-initial-fragment-in-back-stak-fragment-overlapping – Arvis

1

onBackPress()またはonKeyUpを上書きし、先頭のフラグメントを削除してください。

関連する問題