2016-09-22 87 views
2

我想回到以前的片段。我嘗試了很多方法,如addtobackstack(null)和所有。但我沒有得到解決方案。我的問題是當我點擊後退按鈕時,它會轉到主頁片段。但我不想要它。我希望當我點擊後退按鈕時,它會轉到上一個片段。誰能告訴我我該怎麼做?如何去android上手機的後退按鈕點擊上一個片段?

這是我的onActivityCreated()方法: -

@Override 
     public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState); 

      getView().setOnKeyListener(new View.OnKeyListener() { 
       @Override 
       public boolean onKey(View view, int i, KeyEvent keyEvent) { 
        if (i == KeyEvent.KEYCODE_BACK) { 

         getFragmentManager().popBackStack(); 
         return true; 


        } 


        return false; 
       } 
      }); 

     } 

這是第一個片段: -

Fragment fragment = new Packages(); 
getActivity().getSupportFragmentManager() 
       .beginTransaction() 
       .replace(R.id.container, fragment).addToBackStack(null).commit(); 

這是第二個片段: -

Fragment fragment = new DeliveryFrag(); 
mContext.getActivity().getSupportFragmentManager() 
          .beginTransaction() 
          .replace(R.id.container, fragment).addToBackStack(null) 
          .commit(); 

這是第三片段: -

Fragment fragment = new paytm(); 
    getActivity().getSupportFragmentManager().beginTransaction() 
             .replace(R.id.container, fragment).addToBackStack(null) 
             .commit(); 

我正在做的觀點,並申請集onClickListner就可以了。但程序沒有輸入這個方法。我不知道爲什麼?請誰能告訴我我做錯了什麼?

+0

的可能的複製[如何回到以前的片段上按個別片段的手動後退按鈕?](http://stackoverflow.com/questions/14275627/how-to-go-back-to-先前片段按壓手動後退按鈕個人) – Ironman

+0

@Ironman我沒有得到該鏈接的解決方案。這就是爲什麼我再次問。如果你知道答案,請告訴我。 – aarav

+0

請告訴我們你是如何瀏覽(例如:首頁>片段A>片段B> ...) –

回答

0

您應該在onResume中調用此方法。像這樣:

@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 (keyCode == KeyEvent.KEYCODE_BACK) { 

        getFragmentManager().popBackStack(); 
        return true; 
       } 

       return false; 
      } 
     }); 

    } 
1

您必須使用fragmentManager.addToBackStack(<fragment tag>).commit();將片段保存在堆棧中。然後嘗試做​​

0

使所有公共Fragment像這樣

public Fragment currentFrag = null; 
public Fragment f1 = new Packages(); 
public Fragment f2 = new DeliveryFrag(); 
public Fragment f3 = new paytm(); 

然後,在這裏改變Fragment按鈕,填寫您的空currentFrag與下一個

@Override 
public void onClick(View v){ 

if(currentFrag == null || currentFrag == f1){ 
    //open second fragment code 
    currentFrag = f2; 
    }else if(currentFrag == f2){ 
    //open third fragment code 
    currentFrag = f3; 
    } 
} 

則覆蓋您主要活動中的onBackPressed()方法

@Override 
public void onBackPressed() 
{ 
    if (currentFrag == f1){ 
    super.onBackPressed() // close the app 
    }else if(currentFrag == f2){ 
    //calling your first fragment code 
    currentFrag = null; 
    }else if(currentFrag == f3){ 
    //calling your second fragment code 
    currentFrag = f2; 
    } 
} 

我希望這可以幫助,因爲即使我變得有點困惑

0

爲我工作....你可以試試這個.....可以幫助你...

write addToBackStack(null) before commit(); 

並在您的onBackPressed()方法中寫入以下代碼。

FragmentManager fm = getSupportFragmentManager(); 

    if (fm.getBackStackEntryCount() > 1) { 
     ApplicationLog.Log(TAG,"IN > 1"); 
     fm.popBackStack(); //will redirect you previous visited fragment 
    } 
    else if(fm.getBackStackEntryCount()==1) 
    { 
     finish(); //will close application 
    } 
相關問題