根据Android API文档,不推荐使用Activity.onRetainNonConfigurationInstance()来支持Fragment.setRetainInstance().
但是,我遇到了两个不同的情况,Fragment.setRetainInstance()似乎不可行.
如果Fragment包含WebView.根据Diane Hackborne的说法,您不能在配置更改中重用WebView.我想这意味着你需要在屏幕旋转时允许Fragment拆除并重新创建WebView,并使用WebView.saveState()和WebView.restoreState()来恢复Web视图状态.
如果Fragment属于配置更改后不再存在的布局,则当FragmentManager尝试恢复Fragment时,它将抛出:
java.lang.IllegalArgumentException: No view found for id 0x7f060091 for fragment
Run Code Online (Sandbox Code Playgroud)
如果您在横向模式下具有双片段布局,但在纵向模式下具有单片段布局,则会发生这种情况(例如).当从landscape转换为portrait时,如果setRetainInstance()设置为true,则Fragment都不会被销毁,但是一个片段不再具有要重新附加的有效视图,因此是异常.
因此,如果您正在构建基于Fragment的应用程序,并且需要在配置更改之间保留数据(例如对运行的AsyncTasks的引用),并且您不能使用Fragment.setRetainInstance(),并且没有Fragment.onRetainNonConfigurationInstance (),最好的方法是什么?