当配置更改(轮换等)时重新创建Activity时,FragmentTransaction的hide()不会保留。
它重新添加了后堆栈中的所有片段,因此之前隐藏的片段变得可见。例)碎片A(隐藏),B(显示),C(隐藏),D(隐藏)位于后堆栈中。例如,当我旋转时,它会在加载A,B和C后在顶部显示片段D.
not_found.__nonzero__()
对此有何解决方法?
[编辑]添加问题上下文的详细信息。
我想要完成的是让底栏(我的自定义视图只是告诉我哪个标签被点击)我可以在片段之间切换到它所处的状态。
一个例子是Instagram,Quora和Google Plus应用程序。
[编辑2以回应Scrotos]
这是在我的Presenter类中。 FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.fade_in, R.anim.fade_out, R.anim.fade_in, R.anim.fade_out);
// Hide all fragments other than the first
for (int i = 1; i < fragments.length; i++) {
if (fragments[i] != null) {
ft.hide(fragments[i]);
}
}
// Display only the first fragment
if (fragments[0].isAdded()) {
ft.show(fragments[0]);
}
else {
ft.add(R.id.content_view, fragments[0], fragmentTag);
}
ft.commit();
执行上面的片段事务。其他只是初始化,如设置内容和注册监听器。
loadFirstScreen()
答案 0 :(得分:0)
在您显示的应用程序中,他们可能正在根据容器ID删除/添加片段。同时在onCreate或onCreateView中使用onSaveInstanceState和savedInstanceState包保持片段状态
答案 1 :(得分:0)
问题中的代码实际上有效。需要注意的一点是,如果在配置更改重新创建过程中片段中的hidden()
为真,则不设置操作栏标题。
感谢@Scrotos聊天。