2016-12-23 8 views
0

私はこのようなコード化されているが動作していない:PopBackStackが正しく

フラガ>> FragB >> FragC >>

私はFragDのonBackpress()を押すと、それはフラガ上に直接行くが、私がしたいのFragDそれはFragCに行きなさい。ここ

BackPressコード:

if (getActivity().getSupportFragmentManager().getBackStackEntryCount() > 0) { 
      back_btn.setVisibility(View.GONE); 
      getActivity().getSupportFragmentManager().popBackStack(); 
     } 

がフラグメントコードの交換:あなたはaddToBackStack方法

public void setmFragmentContainer(Fragment fragment) 
    { 
     final String tag = fragment.getClass().getName(); 
     FragmentManager manager = getSupportFragmentManager(); 
     FragmentTransaction transaction = manager.beginTransaction(); 
     transaction.replace(R.id.layout_content, fragment, tag); 
     transaction.addToBackStack(tag); 
     transaction.commit(); 
    } 

このメソッドを使用してbackstackにすべてのフラグメントを追加する必要が

     FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
         FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
         FragmentA fragmentA = new FragmentA(); 
         fragmentTransaction.replace(R.id.framelayoutinner, fragmentA); 
         fragmentTransaction.addToBackStack("fragmentA"); 
         fragmentTransaction.commit(); 



         FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
         FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
         FragmentA fragmentB = new Fragmentb(); 
         fragmentTransaction.replace(R.id.framelayoutinner_2, fragmentB); 
         fragmentTransaction.addToBackStack("fragmentB"); 
         fragmentTransaction.commit(); 
+3

フラグメントトランザクションを実行中にaddtobackstackメソッドを使用しましたか? –

+1

フラグメントトランザクションをバックスタックに追加する場合は、バックスタックを 'onBackPressed()'で処理する必要はありません。そのフラグメントをホストしているアクティビティによって注意が払われます。 –

+0

2つの容器を使用していますか? framelayoutinnerとframelayoutinner_2 – Reena

答えて

0

はあなたを助けるかもしれない

+0

backstackにフラグメントを追加していないとは言いません。 –

+0

はい私はそれをバックスタックに追加しました。 –

+0

はい、あなたは正しいUmarですが、addTobackstackはフラグメントマネージャーのフラグメントのバックスタックを維持するのに役立ちます – Reena

0

ネストされたフラグメントを使用しています。別のフラグメントからフラグメントをロードすると、ネストされた構造になります。そのため、ルートフラグメント内に子フラグメントが存在するかどうかを確認してから、その子フラグメントを最初にポップしてみてください。

これにはgetChildFragmentManager()を使用し、子どものほとんどのフラグメント(最後に追加されたもの)を取得するまで再帰呼び出しを行います。あなたの断片にタグをうまく使いましょう。