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
Resuming a previous fragment onBackPressed()?
提问by u3l
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
). 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();
}