Java 恢复上一个 onBackPressed() 片段?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/24487756/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-14 12:31:46  来源:igfitidea点击:

Resuming a previous fragment onBackPressed()?

javaandroidandroid-fragmentsandroid-fragmentactivity

提问by u3l

I have a HomeFragmentthat 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 FragmentActivitywhich 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 fragfragment and I press the back button, it doesn't go back to the last fragment (the HomeFragment). Instead, it attempts to go back to the last Activity, but since there is none (i.e. the previous activity had finish()invoked on it), it just goes to the Android Home Screen.

这就是我尝试过的,但是如果我在frag片段上并按下后退按钮,它不会返回到最后一个片段(HomeFragment)。相反,它尝试返回到最后一个 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:如果我不清楚,请在下面发表评论,我会尽力澄清。

采纳答案by Apoorv

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();

回答by Kuno

beginTransaction creates a new FragmentTransaction. It has a method addToBackstack. If you call it before you commit your transaction you can remove your overridden onBackPressed completely. Reference

beginTransaction 创建一个新的 FragmentTransaction。它有一个方法addToBackstack。如果在提交事务之前调用它,则可以完全删除覆盖的 onBackPressed。参考

回答by kalyan pvs

Add your fragment to back stack using addToBackStack(null)like..

使用addToBackStack(null)like将您的片段添加到后台堆栈中。

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

回答by Archie.bpgc

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();
}