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(空);

現在我有以下問題。從片段С我單擊後退按鈕並進入片段A,但兩層碎片相互疊加。

Like this screenshot

+0

在堆棧中添加所有的片段,然後迭代循環,直到第一個片段 – Bhavnik

+0

您使用viewpager? –

+0

也許你想檢查[這個問題](http://stackoverflow.com/questions/18634207/difference-between-add-replace-and-addtobackstack) –

回答

-1

當你調用Transaction.addToBackStack(null),你Fragment添加到堆棧中,所以你不應該叫,當你不想要添加片段堆棧中。

你應該做的

什麼,當你與Fragment-B更換你的​​你不應該叫Transaction.addToBackStack(null),但是當你與Fragment-C替換Fragment-B你應該叫Transaction.addToBackStack(null)

這樣做你​​和Fragment-C將backstacked但Fragment-B不會,現在當你按下後退按鈕,你將有​​。

0

您可以使用下面的代碼Fragment_C要返回Fragment_A上後退按鍵從fragment_C

@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

從A向B的B

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

過渡到C

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

覆蓋活動的onBackPressed()方法。

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