其他分享
首页 > 其他分享> > 保留的片段是否保留其视图?

保留的片段是否保留其视图?

作者:互联网

调用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