恢复上一个片段onBackPressed()?

时间:2014-06-30 10:12:49

标签: java android android-fragments android-fragmentactivity

我有一个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:如果我不清楚,请在下面评论,我会尽力澄清。

4 个答案:

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