1

私はフラグメントを持っています、例えばA→B→Cです。フラグメントCに入っているときに戻るボタンを押すと、フラグメントAを取得する必要がありますつまり、フラグメントBはbackStackに追加する必要はありません。フラグメント間の遷移を実装するコードを次に示します。フラグメントCからフラグメントAに戻る戻るボタン

FragmentManager fragmentManager = this.getSupportFragmentManager(); 
FragmentTransaction transaction = fragmentManager.beginTransaction(); 
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 

Fragment fragment = fragmentManager.findFragmentByTag(tag); 
fragment.getArguments().putAll(args); 

transaction.replace(idContainer, fragment, tag); 
transaction.addToBackStack(null); 
transaction.commit(); 

断片Cの開口部に、私は、transaction.addToBackStack(null)を使用していません。

次に、次の問題があります。フラグメントСから戻るボタンをクリックしてフラグメントAを入力しますが、フラグメントの2つのレイヤーが互いに重ねられます。

Like this screenshot

+0

バックスタック内のすべてのフラグメントを追加し、最初のフラグメントまでループを繰り返します。 – Bhavnik

+0

viewpagerを使用していますか? –

+0

[この質問](http://stackoverflow.com/questions/18634207/difference-between-add-replace-and-addtobackstack)をチェックしたいと思うかもしれません。 –

答えて

-1

あなたがTransaction.addToBackStack(null)を呼び出すと、あなたがbackstackにあなたのフラグメントを追加したくないときに呼び出すべきではありませんので、ごFragmentは、backstackに追加されました。あなたはTransaction.addToBackStack(null)を呼び出すべきではありませんFragment-Bであなたの​​を交換するときは、

を行う必要がありますが、あなたはFragment-CFragment-Bを交換するときにTransaction.addToBackStack(null)を呼び出す必要がありますどのような

こうするあなたのあなたが戻ってボタンを押すと​​とbackstackedされますFragment-Cが、Fragment-B、今は​​を持つことになりません。

0

あなたはC

getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new CFragment(), "CFragment").addToBackStack("B_TO_C").commit(); 
にBから

getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new BFragment(), "BFragment").addToBackStack("A_TO_B").commit(); 

トランジションをAからBへの移行

@Override 
public void onResume() { 

    super.onResume(); 

    getView().setFocusableInTouchMode(true); 
    getView().requestFocus(); 
    getView().setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 

      if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK){ 


       Fragment_A fragment = null; 
       fragment = new Fragment_A(); 

       FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
       FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
       fragmentTransaction.replace(R.id.container_body, fragment); 
       fragmentTransaction.commit(); 


       return true; 

      } 

      return false; 
     } 
    }); 
} 
0

fragment_C

から戻るプレスボタンをFragment_Aに戻るにはFragment_Cに次のコードを使用することができます

アクティビティのonBackPressed()メソッドをオーバーライドします。

@Override 
public void onBackPressed(); 
if (getSupportFragmentManager().findFragmentByTag("CFragment") != null) { 
    getSupportFragmentManager().popBackStack("A_TO_B", 
    FragmentManager.POP_BACK_STACK_INCLUSIVE); 
} else { 
     super.onBackPressed(); 
     } 
} 
関連する問題