Android 片段简单的后台堆栈
Android fragment simple backstack
我有一个 activity 包含一个容器,该容器将接收 2 个碎片。
一旦 activity 初始化,我开始第一个片段:
showFragment(new FragmentA());
private void showFragment(Fragment fragment) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, fragment, fragment.getTag())
.addToBackStack(fragment.getTag())
.commit();
}
然后当用户点击 FragmentA 时,我在 Activity 级别收到此点击,我调用:
showFragment(new FragmentB());
现在,当我按下后退按钮时,它 returns 将片段 A(正确),当我再次按下后退按钮时,它显示空屏幕(但保持在相同的 activity)。我希望它只是关闭应用程序(因为 activity 没有父项)。
有很多与 Fragments 和 backstack 相关的帖子,但我找不到一个简单的解决方案。我想避免我必须检查我是否正在对片段 A 或片段 B 进行后退的情况,因为我可能会扩展片段的数量并且我将需要维护该方法。
addToBackStack(fragment.getTag())
仅用于片段 B,不适用于片段 A
我认为你的片段 A 没有正确弹出,尝试使用添加片段而不是替换来获得正确的后退导航,但是你可以使用以下方法检查后退堆栈的计数:
FragmentManager fragmentManager = getSupportFragmentManager();
int count = fragmentManager.getBackStackEntryCount();
并且当您希望 activity 在某些片段数上关闭时,您也可以在 activity onBackPressed()
中直接调用 finish()
。
您得到的是空白屏幕,因为当您添加第一个片段时,您 calling addToBackStack()
因此您在不知不觉中添加了一个空白屏幕!
现在你可以做的是在onBackPressed()
中调用下面的方法,你的问题就解决了
public void moveBack()
{
//FM=fragment manager
if (FM != null && FM.getBackStackEntryCount() > 1)
{
FM.popBackStack();
}else {
finish();
}
}
不要在 ONBackPRESSED() 中调用 SUPER;
直接调用上面的方法即可!
我有一个 activity 包含一个容器,该容器将接收 2 个碎片。 一旦 activity 初始化,我开始第一个片段:
showFragment(new FragmentA());
private void showFragment(Fragment fragment) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, fragment, fragment.getTag())
.addToBackStack(fragment.getTag())
.commit();
}
然后当用户点击 FragmentA 时,我在 Activity 级别收到此点击,我调用:
showFragment(new FragmentB());
现在,当我按下后退按钮时,它 returns 将片段 A(正确),当我再次按下后退按钮时,它显示空屏幕(但保持在相同的 activity)。我希望它只是关闭应用程序(因为 activity 没有父项)。
有很多与 Fragments 和 backstack 相关的帖子,但我找不到一个简单的解决方案。我想避免我必须检查我是否正在对片段 A 或片段 B 进行后退的情况,因为我可能会扩展片段的数量并且我将需要维护该方法。
addToBackStack(fragment.getTag())
仅用于片段 B,不适用于片段 A
我认为你的片段 A 没有正确弹出,尝试使用添加片段而不是替换来获得正确的后退导航,但是你可以使用以下方法检查后退堆栈的计数:
FragmentManager fragmentManager = getSupportFragmentManager();
int count = fragmentManager.getBackStackEntryCount();
并且当您希望 activity 在某些片段数上关闭时,您也可以在 activity onBackPressed()
中直接调用 finish()
。
您得到的是空白屏幕,因为当您添加第一个片段时,您 calling addToBackStack()
因此您在不知不觉中添加了一个空白屏幕!
现在你可以做的是在onBackPressed()
中调用下面的方法,你的问题就解决了
public void moveBack()
{
//FM=fragment manager
if (FM != null && FM.getBackStackEntryCount() > 1)
{
FM.popBackStack();
}else {
finish();
}
}
不要在 ONBackPRESSED() 中调用 SUPER;
直接调用上面的方法即可!