我有一个HomeFragment
有一个按钮,点击该按钮会调用以下内容:
Fragment frag = new CustFragment();
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.home_container, frag).commit();
然后在我的FragmentActivity
中,这是上面提到的片段,我有:
@Override
public void onBackPressed() {
getFragmentManager().popBackStack();
super.onBackPressed();
}
这就是我尝试过的,但是如果我在frag
片段上并按下后退按钮,它就不会返回到最后一个片段(HomeFragment
)。相反,它会尝试返回上一个活动,但由于没有活动(即之前的活动已调用finish()
),它只会转到Android主屏幕。
我做错了什么?
PS:如果我不清楚,请在下面评论,我会尽力澄清。答案 0 :(得分:5)
更改
@Override
public void onBackPressed()
{
getFragmentManager().popBackStack();
super.onBackPressed();
}
到
@Override
public void onBackPressed()
{
if(getFragmentManager().getBackStackEntryCount() > 0)
getFragmentManager().popBackStack();
else
super.onBackPressed();
}
和
fragmentManager.beginTransaction().replace(R.id.home_container, frag).commit();
到
fragmentManager.beginTransaction().replace(R.id.home_container, frag).addToBackStack(null).commit();
答案 1 :(得分:3)
使用addToBackStack(null)
类似..
fragmentManager.beginTransaction().replace(R.id.home_container, frag).addToBackStack(null).commit();
答案 2 :(得分:1)
beginTransaction创建一个新的FragmentTransaction。它有一个方法addToBackstack。如果在提交事务之前调用它,则可以完全删除被覆盖的onBackPressed。 Reference
答案 3 :(得分:1)
您可以使用:
fragmentTransaction.addToBackStack(null);
并且无需照顾onBackPressed()
。
你的onBackPressed()
super.onBackPressed()
中的BTW意味着你实际上什么都没改变。
应该是这样的:
if(currentFragmentIsCustFragment){
getFragmentManager().popBackStack();
}else{
super.onBackPressed();
}