【发布时间】:2019-09-13 08:38:51
【问题描述】:
FragmentA 正确响应 onConfigurationChanged,但如果我在其顶部打开 FragmentB 并旋转设备,它会触发 onConfigurationChanged 并触发 FragmentA 的 onConfigurationChanged。
我在活动中有fragmentA,FragmentA 在其中响应onConfigurationChanged 并在横向模式下打开另一个活动,如果单击FragmentA 列出其打开的详细信息片段,我们将其称为fragmentB。 fragmentB 也有方法 onConfigurationChanged 并以横向模式打开另一个活动。
FragmentA{
@Override
public void onClick(View v) {
//open FragmentB
}
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
} else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
//landScape of FragmentA
//open any Activaty
}
}
FragmentB{
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
} else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
//landScape of FragmentB
//open any Activaty
}
}
fragmentB 上的方向更改导致打开两个活动。一个来自 fragmentA 的 onConfigurationChanged,另一个来自 onConfigurationChanged 片段B。
【问题讨论】:
-
片段 A 和 B 是否在同一个活动中?如果是,最好处理来自活动的配置更改,并根据活动片段更改您对更改的响应。
-
请参考这个solution使用可以使用setUserVisibleHint。
-
@RichardMcFriendOluwamuyiwa 是的,两个片段都在同一个活动中......但两者都在横向模式下打开不同的活动......所以我如何跟踪用户当前在哪个片段......并相应地打开其他活动..
-
@GovindSharma 这个解决方案对我不起作用......“setUserVisibleHint 适用于视图寻呼机,但不适用于常规片段容器。”这是该答案中的评论......我正在使用常规片段.
-
@bhavik-nathani 的解决方案会让您知道片段是否是
View/ViewGroup对用户可见,但我建议您使用FragmentManager来执行此操作。如何执行此操作现在取决于您使用的是哪个FragmentManager,以及您是否使用fragment transactions。
标签: java android android-studio