2016-10-11 41 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(); 
    } 
}