2016-10-11 39 views
0

我有4個片段。它們由HomeFragment,Rainfall,rainday和yieldFragment組成。 如果現在我在降雨片段,然後我按backbackton, 我想片段將返回到Home片段(作爲默認值)。 但現在我的應用情況是按下後退按鈕, 應用程序已關閉。我嘗試過使用onBackpressed,但我認爲我的onBackPressed不能正常工作。設置OnBackPressed在片段

我該如何處理這種情況..?請任何人都可以回答。 我試過這個...

public void onBackPressed() { 

     fragment=new HomeFragment();} 

請幫助我,如果有人知道。

+0

您可以覆蓋onBackPressed()在它的父活動的 –

+2

可能的複製[如何實現片段onBackPressed()?](HTTP:/ /stackoverflow.com/questions/5448653/how-to-implement-onbackpressed-in-fragments) –

+0

類似的問題解決了[這裏](https://stackoverflow.com/a/46425415/6831069)享受 –

回答

0
  • 首先在開關中的片段時,用來#replace 而不是#將新片段從容器活動。
  • 秒內#內部片段,覆蓋onResume()如下所示 。它會給你回撥設備後退按鈕。

    @覆蓋 公共無效的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) { 
    
           HomeFragment fragObj = new HomeFragment(); 
    
           getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragObj) 
             .commit(); 
    
           return true; 
          } 
    
          return false; 
         } 
        }); 
    } 
    
+0

我可以問你什麼(R.id.fragment_container)的引用? :) – Sasya

+0

R.id.fragment_container,是您的容器活動(主要活動/家庭活動)的所有片段將被加載的id。正常情況下,我們使用frameLayout作爲邊主要活動中的容器,並且此id引用frameLayout。 – Radhey

0

您的片段事務添加到返回堆疊,就像這樣:

getSupportFragmentManager().beginTransaction() 
      .replace(R.id.your_fragment_id, RainfallFragment()) 
      .addToBackStack(null) 
      .commit() 

如果你正在擴大AppCompatActivity和使用支持庫的最新版本,你不必做任何事情。但如果不是這樣,您的活動覆蓋onBackPressed():

@Override 
public void onBackPressed() { 
    if (getSupportFragmentManager().getBackStackEntryCount() > 0) { 
      getSupportFragmentManager().popBackStack(); 
    } else { 
      finish(); 
    } 
}