我有一个带有按钮的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
)。相反,它尝试返回到上一个活动,但是由于没有活动(即,先前的活动已调用[C0]),因此它只会转到Android主屏幕。
我在做什么错?
PS:如果我不清楚,请在下面评论,我会尽力澄清。
更改
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();
使用fragmentManager.beginTransaction().replace(R.id.home_container, frag).addToBackStack(null).commit();
将片段添加到后堆栈中。
addToBackStack(null)
beginTransaction创建一个新的FragmentTransaction。它具有方法fragmentManager.beginTransaction().replace(R.id.home_container, frag).addToBackStack(null).commit();
。如果在提交事务之前调用它,则可以完全删除覆盖的onBackPressed。 addToBackstack
您可以使用:
Reference
并且不需要照顾fragmentTransaction.addToBackStack(null);
。
onBackPressed()
中的顺便说一句onBackPressed()
表示您实际上没有进行任何更改。
应该是这样的:
super.onBackPressed()