小编Ste*_*ven的帖子

无法使用Fragment.setRetainInstance()作为Activity.onRetainNonConfigurationInstance()的替代品

根据Android API文档,不推荐使用Activity.onRetainNonConfigurationInstance()来支持Fragment.setRetainInstance().

但是,我遇到了两个不同的情况,Fragment.setRetainInstance()似乎不可行.

  1. 如果Fragment包含WebView.根据Diane Hackborne的说法,您不能在配置更改中重用WebView.我想这意味着你需要在屏幕旋转时允许Fragment拆除并重新创建WebView,并使用WebView.saveState()WebView.restoreState()来恢复Web视图状态.

  2. 如果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 (),最好的方法是什么?

android android-fragments

13
推荐指数
2
解决办法
4321
查看次数

标签 统计

android ×1

android-fragments ×1