2017-06-02 44 views
0

情況如下 Flow:Activity - > Fragment1 - > Fragment2 - > Fragment3 當屏幕上顯示片段1〜3時,單擊H/W後退按鈕,Acitivity彈出。在Onbackpressed上獲取前一個片段

我想知道哪個片段是onbackpress方法中的前一個片段被調用的。

代碼(活動) public void setFragment(Fragment fragment) { if (!isFinishing()) { mFragmentManger.beginTransaction().replace(R.id.input_preference_contatiner, fragment).commit(); } } 代碼(片段1 2 3) @Override public void onClick(View v) { InputPreferenceActivity inputPreferenceActivity = (InputPreferenceActivity) getActivity(); inputPreferenceActivity.setFragment(new InputPreferenceStep1Fragment()); }

+0

你添加的片段或更換呢? –

+0

請發一些代碼 – Raghunandan

+0

我添加了我寫的代碼 –

回答

0

當你片段之間的轉換,呼叫addToBackStack()爲您FragmentTransaction的一部分:

FragmentTransaction tx = fragmentManager.beginTransation(); 
tx.replace(R.id.fragment, new MyFragment()).addToBackStack("tag").commit(); 

如果您需要更多詳細的控制(例如,當某些片段可見時,您想禁止後退鍵),您可以在片段的父視圖上設置OnKeyListener

//You need to add the following line for this solution to work; thanks skayred 
fragment.getView().setFocusableInTouchMode(true); 
fragment.getView().requestFocus(); 
fragment.getView().setOnKeyListener(new OnKeyListener() 
{ 
    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) 
    { 
     if(keyCode == KeyEvent.KEYCODE_BACK) 
     { 
      return true; 
     } 
     return false; 
    } 
}); 
0

將此代碼放在片段,當你改變片段

addToBackStack(空)

在片段變化

  FragmentManager fragmentManager=getSupportFragmentManager(); 
     fragmentManager.beginTransaction().replace(R.id.container,fragment).addToBackStack(null).commit();