[英]Replacing fragment wrong order when not using addToBackStack
我有一个菜单,用户可以在其中单击不同的按钮并在不同的底部栏之间切换。
当用户单击 button1 时会发生以下情况:
setFragment(R.id.bottom_bar_container, new FooBottomBar());
当他们点击 button2 时,它会调用:
setFragment(R.id.bottom_bar_container, new BarBottomBar());
下面是 setFragment 方法:
private void setFragment(int layout, Fragment newFragment) {
String tag = newFragment.getClass().getCanonicalName();
Fragment fragment = getFragmentManager().findFragmentByTag(tag);
if (fragment == null) {
fragment = newFragment;
}
Log.d("Tag", "Replacing with " + tag);
getFragmentManager()
.beginTransaction()
.replace(layout, fragment, tag)
.commit();
}
这总体上运行良好,但如果用户垃圾邮件点击两个按钮,可能会发生一些有趣的事情。
日志猫:
Tag: Replacing with com.example.FooBottomBar
Tag: Replacing with com.example.BarBottomBar
但是在 UI 中我可以看到FooBottomBar
即使最后一个替换是BarBottomBar
。
我发现如果我添加addToBackStack(null)
问题就会消失,但我不想把它放在后堆栈上。
getFragmentManager()
.beginTransaction()
.replace(layout, fragment, tag)
.addToBackStack(null)
.commit();
我想知道这个问题的原因以及是否有任何解决方案。
使用getChildFragmentManager()
和commitNow()
代替。
getChildFragmentManager()
.beginTransaction()
.replace(layout, fragment, tag)
.commitNow();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.