调用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框架有其自身的问题.
您不必使用保留的片段.我发现它们相当有用.
总结以上是内存溢出为你收集整理的保留的片段是否保留其视图?全部内容,希望文章能够帮你解决保留的片段是否保留其视图?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)