如何在片段中恢复AdapterViewFlipper的状态?

时间:2018-06-08 11:29:30

标签: java android android-fragments

我有FragmentAdapterViewFlipper显示不同的观点。 AdapterViewFlipper设置为MyCustomAdapter,其中包含'查看1','查看2','查看3'和&# 39;查看4',以及它在我自己的Fragment" onCreateView()"中充气的布局资源文件中。

我面临的问题是每当我旋转设备时,AdapterViewFlipper中的当前视图都会返回到MyCustomAdapter中添加的第一个视图。

例如:如果AdapterViewFlipper中的当前视图显示' View 2'并且用户旋转设备,它返回到'视图1'。 所以我试图做的是每当我旋转设备时恢复AdapterViewFlipper中的当前视图及其片段中的状态。 虽然我发现这种方法说我应该在AndroidManifest中的元素声明android:configChanges属性,它就像一个魅力,但当我读到它时,Android并没有推荐它。 但这在Activity中运行良好。 那么我有办法自己解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

所以你需要做的第一件事就是确保你自己保留片段。并且不会在每次重新创建活动时放置新实例。

您可以通过简单检查onCreate()方法来确定这一点。 您可以检查savedInstance的{​​{1}} Bundle参数是否为onCreate(),在这种情况下,只需要更换您的片段或检查您的片段是否已添加到您的null

FragmentManager

OR

if (savedInstanceState == null) {
    // This is a brand new activity, and not a re-creation due to config change
    getSupportFragmentManager().beginTransaction().replace(id, yourFragmentInstnace, stringTag);
}

您还需要在片段if (getSupportFragmentManager().findFragmentByTag(fragmentTag) == null) { // This is a brand new activity, and not a re-creation due to config change getSupportFragmentManager().beginTransaction().replace(id, yourFragmentInstnace, fragmentTag); } 或其他内容中致电setRetainInstance(true)

在配置更改期间,它将保留相同的片段实例。

这应该会自动允许您的onCreate()维持其UI状态,这是它显示的当前项目。

你可以找到一个很好的例子here