简体   繁体   English

恢复上一个 onBackPressed() 片段?

[英]Resuming a previous fragment onBackPressed()?

I have a HomeFragment that has a button, which when clicked calls the following:我有一个HomeFragment有一个按钮,点击时调用以下内容:

Fragment frag = new CustFragment();
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.home_container, frag).commit();

Then in my FragmentActivity which is the fragments mentioned above, I have:然后在我的FragmentActivity就是上面提到的片段中,我有:

@Override
public void onBackPressed() {

    getFragmentManager().popBackStack();
    super.onBackPressed();

}

That's what I've tried, but if I'm on the frag fragment and I press the back button, it doesn't go back to the last fragment (the HomeFragment ).这就是我尝试过,但如果我在frag片段和我按后退按钮,它不会回到过去的片段(该HomeFragment )。 Instead, it attempts to go back to the last Activity, but since there is none (ie the previous activity had finish() invoked on it), it just goes to the Android Home Screen.相反,它尝试返回到最后一个 Activity,但由于没有(即前一个 Activity 调用了finish() ),它只返回到 Android 主屏幕。

What am I doing wrong?我究竟做错了什么?

PS: If I'm being unclear, just comment below and i'll try to clarify. PS:如果我不清楚,请在下面发表评论,我会尽力澄清。

Change改变

@Override
public void onBackPressed() 
{
   getFragmentManager().popBackStack();
   super.onBackPressed();
}

to

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

and

fragmentManager.beginTransaction().replace(R.id.home_container, frag).commit();

to

fragmentManager.beginTransaction().replace(R.id.home_container, frag).addToBackStack(null).commit();

使用addToBackStack(null)将您的片段添加到后台堆栈,例如..

fragmentManager.beginTransaction().replace(R.id.home_container, frag).addToBackStack(null).commit();

beginTransaction creates a new FragmentTransaction. beginTransaction 创建一个新的 FragmentTransaction。 It has a method addToBackstack .它有一个方法addToBackstack If you call it before you commit your transaction you can remove your overridden onBackPressed completely.如果在提交事务之前调用它,则可以完全删除覆盖的 onBackPressed。 Reference 参考

You can use:您可以使用:

fragmentTransaction.addToBackStack(null);

and no need to take care of onBackPressed() .并且无需处理onBackPressed()

BTW in your onBackPressed() super.onBackPressed() means you are actually changing nothing.顺便说一句,在你的onBackPressed() super.onBackPressed()意味着你实际上没有改变任何东西。

It should have been something like:它应该是这样的:

if(currentFragmentIsCustFragment){
   getSupportFragmentManager().popBackStack();
}else{
   super.onBackPressed();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM