FragmentTransaction hide()在Activity重新创建(配置更改/等)

时间:2016-10-11 00:41:34

标签: android android-fragments fragmenttransaction fragmentmanager

当配置更改(轮换等)时重新创建Activity时,FragmentTransaction的hide()不会保留。

它重新添加了后堆栈中的所有片段,因此之前隐藏的片段变得可见。例)碎片A(隐藏),B(显示),C(隐藏),D(隐藏)位于后堆栈中。例如,当我旋转时,它会在加载A,B和C后在顶部显示片段D.

not_found.__nonzero__()

对此有何解决方法?

[编辑]添加问题上下文的详细信息。

我想要完成的是让底栏(我的自定义视图只是告诉我哪个标签被点击)我可以在片段之间切换到它所处的状态。

一个例子是Instagram,Quora和Google Plus应用程序。 enter image description here

[编辑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()

2 个答案:

答案 0 :(得分:0)

在您显示的应用程序中,他们可能正在根据容器ID删除/添加片段。同时在onCreate或onCreateView中使用onSaveInstanceState和savedInstanceState包保持片段状态

答案 1 :(得分:0)

问题中的代码实际上有效。需要注意的一点是,如果在配置更改重新创建过程中片段中的hidden()为真,则不设置操作栏标题。

感谢@Scrotos聊天。