保留的片段是否保留其视图?
作者:互联网
调用Fragment.setRetainInstance(true)将导致Fragment被FragmentManager保留,但是它是否保留了View?我认为不是,但我正在寻求确认.我想不是因为Fragment.onCreateView()仍然被调用(即使onCreate()不是),并且调用getView()返回null.
如果没有视图,那么在配置更改中保留片段的意义何在?原因之一是保留数据,以避免昂贵的重载,但是还有其他方法可以做到这一点.
提前致谢…
解决方法:
Does a retained Fragment retain its View?
这取决于您如何定义它.该片段将再次调用onCreateView(),因此应该为新活动设置其UI.但是,如果您将字段保留在小部件上,则保留这些字段,并且使这些字段指向新的小部件是您的工作,以避免内存泄漏和其他问题.
What is the point of retaining a Fragment across configuration changes if its Views aren’t?
保留数据,以避免昂贵的重载.
but there are other ways to do that
只有限制.
例如,在所有其他条件相同的情况下,最好通过已保存的实例状态Bundle保留数据.但是,该捆绑软件无法容纳任何物体(例如相机),并且捆绑软件的大小限制为〜1MB,因此它无法容纳大型物体(例如照片).
术语“保留”的部分原因是保留的片段建立在Activity的旧onRetainNonConfigurationInstance()回调之上.现在是最终的,不能使用,IIRC.
可以将比当前活动寿命更长的数据进行全局缓存(例如,用于数据库/网络I / O结果的POJO缓存,图像缓存).但是,某些东西(例如Camera)并不属于此类的静态数据成员.
您使用Loader框架(例如,通过CursorLoader)检索到的资料会自动保留,但对于CursorLoader以外的内容,Loader框架有其自身的问题.
您不必使用保留的片段.我发现它们相当有用.
标签:fragmentmanager,android-fragments,android 来源: https://codeday.me/bug/20191028/1948936.html