微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 片段 – 应该在onCreateView中重用视图,我该怎么做?

其实我总是把我的观点重新用在我的片段中,如下所示:
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().

所以我的问题是:

>是的,如果我查看父母的意见,删除它并将其添加到新的父母?
>或者我应该总是重新创建视图,不要重复使用它?如果是,为什么?
>还有其他点,重用视图会失败吗?

解决方法

也许这可以帮助了解行为.如果您查看 FragmentManagerImpl.java,您会发现以下内容

首先,我们通过调用onCreateView()(第845行)创建一个视图,然后我们用另一个视图来包装创建的视图,这个视图成为我们视图的父级(行848-849).这意味着我们的观点不会成为真正的容器的孩子,但它现在是包装器的一个孩子.当视图从容器中删除时(第998行),重复使用的问题就出现了. FragmentManager从容器中删除包装器视图,但是我们的真实视图保持添加到父包装器视图中.这是导致您遇到的问题.

因此,如果从其父项中删除视图,则可以正常工作.即使知道这一点,我不建议在片段中再次使用观点,因为视图可以比片段长一点,因为即使片段被破坏,它们也可以用于“消失”动画.如果您尝试从当时的父母中删除这样的视图,那么动画可能会被破坏.

不缓存视图的另一个观点是Android不支持按设计在片段中进行视图回收.记住listadapter允许重用视图? Android会关注缓存和适当地重用这些视图.这不是片段的情况.

原文地址:https://www.jb51.cc/android/311731.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐