在BackPressed()上恢复上一个片段?

问题描述 投票:5回答:4

我有一个带有按钮的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)。相反,它尝试返回到上一个活动,但是由于没有活动(即,先前的活动已调用[C​​0]),因此它只会转到Android主屏幕。

我在做什么错?

PS:如果我不清楚,请在下面评论,我会尽力澄清。

java android android-fragments android-fragmentactivity
4个回答
8
投票

更改

finish()

to

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

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

to

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

3
投票

使用fragmentManager.beginTransaction().replace(R.id.home_container, frag).addToBackStack(null).commit(); 将片段添加到后堆栈中。

addToBackStack(null)

1
投票

beginTransaction创建一个新的FragmentTransaction。它具有方法fragmentManager.beginTransaction().replace(R.id.home_container, frag).addToBackStack(null).commit(); 。如果在提交事务之前调用它,则可以完全删除覆盖的onBackPressed。 addToBackstack


1
投票

您可以使用:

Reference

并且不需要照顾fragmentTransaction.addToBackStack(null);

onBackPressed()中的顺便说一句onBackPressed()表示您实际上没有进行任何更改。

应该是这样的:

super.onBackPressed()
© www.soinside.com 2019 - 2024. All rights reserved.