【问题标题】:Wrong replaced fragment view after screen orietation change屏幕方向更改后错误的替换片段视图
【发布时间】:2012-10-19 12:29:01
【问题描述】:

应用具有与父级匹配的框架布局容器的片段活动。 用户与片段 ui 交互,它们相互替换,将 old 放入 backstack,例如: A -> B -> C -> D -> E -> F

当用户改变手机方向时,例如,在片段 D 上并想去片段 E,片段 A 的视图会显示,如果用户按下片段 A 中的某些东西(通常会转到片段 B),视图片段F显示。

屏幕方向改变后如何显示片段E而不是A?

应用程序使用最新的 android 支持库,这发生在 android 4.1 模拟器和 android 2.3 手机(未测试其他 android 版本)。

所有片段都有这个 go next 片段方法:

public final void showNextFragment(final Fragment frg, final String tag) {
    final FragmentTransaction tr = getFragmentManager().beginTransaction();
    tr.remove(this);
    tr.add(R.id.fragment_container, frg, tag);
    tr.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    tr.addToBackStack(tag);
    tr.commit();
}

编辑

在fragment D上旋转屏幕时,所有旋转正常,并显示fragment D的视图。如果用户使用上述方法转到fragment E旋转后,显示的是fragment A的视图而不是E。如果用户正常旋转手机片段E显示。

【问题讨论】:

    标签: android fragment screen-orientation fragmenttransaction


    【解决方案1】:

    一种解决方案是将当前标签或片段保留为静态变量。

    否则,您要在屏幕方向上返回 A 吗?如果没有,您应该在清单中添加:

    <activity android:configChanges="keyboardHidden|orientation" ...
    

    【讨论】:

    • 您的回答让我检查了屏幕旋转的行为。问题是活动在 onCreate() 中读取了第一个片段,所以我检查了 savedInstanceState 是否为空。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多