我有一个Fragment
,通过AdapterViewFlipper
显示了不同的视图。
正在使用AdapterViewFlipper
设置MyCustomAdapter
,该AdapterViewFlipper
包含“视图1”,“视图2”,“视图3”和“视图4”,并将其放置在布局资源文件中,该文件在我自己的片段“ onCreateView”中进行了放大。 ()”。
我面临的问题是,每当旋转设备时,MyCustomAdapter
中的当前视图都将返回到AdapterViewFlipper
中添加的第一个视图。
例如:如果AdapterViewFlipper中的当前视图显示“视图2”,并且用户旋转设备,它将返回“视图1”。
因此,我想做的是每当我旋转设备时都将android:configChanges
中的当前视图及其片段中的状态恢复。
尽管我发现这种方法说我应该在AndroidManifest中的元素上声明属性,并且它的工作原理很吸引人,但是当我阅读它时,Android却不推荐使用。
但这在Activity中工作正常。
那么我有办法自己解决这个问题吗?
最佳答案
因此,您需要做的第一件事是确保保留片段本身。并且不要在每次重新创建活动时都放置新实例。
您可以通过在onCreate()
方法中进行简单检查来确定这一点。
您可以检查savedInstance
的Bundle
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