private View mView = null; @Override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) { if (mView == null) mView = inflater.inflate(R.layout.view); return mView; }
这样做与观众等一样.现在我开始在简单的活动中使用我的片段,如果并且只有当我将片段添加到后台时,这将由于java.lang.IllegalStateException而失败:指定的子节点已经有一个父节点.您必须首先调用子对象的removeView().
所以我的问题是:
>是的,如果我查看父母的意见,删除它并将其添加到新的父母?
>或者我应该总是重新创建视图,不要重复使用它?如果是,为什么?
>还有其他点,重用视图会失败吗?
解决方法
首先,我们通过调用onCreateView()(第845行)创建一个视图,然后我们用另一个视图来包装创建的视图,这个视图成为我们视图的父级(行848-849).这意味着我们的观点不会成为真正的容器的孩子,但它现在是包装器的一个孩子.当视图从容器中删除时(第998行),重复使用的问题就出现了. FragmentManager从容器中删除包装器视图,但是我们的真实视图保持添加到父包装器视图中.这是导致您遇到的问题.
因此,如果从其父项中删除视图,则可以正常工作.即使知道这一点,我不建议在片段中再次使用观点,因为视图可以比片段长一点,因为即使片段被破坏,它们也可以用于“消失”动画.如果您尝试从当时的父母中删除这样的视图,那么动画可能会被破坏.
不缓存视图的另一个观点是Android不支持按设计在片段中进行视图回收.记住listadapter允许重用视图? Android会关注缓存和适当地重用这些视图.这不是片段的情况.
原文地址:https://www.jb51.cc/android/311731.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。