我有一个Fragment,通过AdapterViewFlipper显示了不同的视图。
正在使用AdapterViewFlipper设置MyCustomAdapter,该AdapterViewFlipper包含“视图1”,“视图2”,“视图3”和“视图4”,并将其放置在布局资源文件中,该文件在我自己的片段“ onCreateView”中进行了放大。 ()”。

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

例如:如果AdapterViewFlipper中的当前视图显示“视图2”,并且用户旋转设备,它将返回“视图1”。
因此,我想做的是每当我旋转设备时都将android:configChanges中的当前视图及其片段中的状态恢复。
尽管我发现这种方法说我应该在AndroidManifest中的元素上声明属性,并且它的工作原理很吸引人,但是当我阅读它时,Android却不推荐使用。
但这在Activity中工作正常。
那么我有办法自己解决这个问题吗?

最佳答案

因此,您需要做的第一件事是确保保留片段本身。并且不要在每次重新创建活动时都放置新实例。

您可以通过在onCreate()方法中进行简单检查来确定这一点。
您可以检查savedInstanceBundle onCreate()参数是否为null,在这种情况下,仅需要替换片段,或者检查片段是否已添加到FragmentManager

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()或其他名称。

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

这应该自动允许您的AdapterViewFlipper保持其UI状态,这是它正在显示的当前项目。

您可以找到一个很好的示例here

07-24 09:37