ViewStub 父级变为空

ViewStub parent goes null

我有一个包含 ViewStub 的 ViewHolder,当我想将数据绑定到我的视图中时,我首先检查 viewStub 之前是否膨胀?

if (mViewStub != null) //still not inflated

然后如果 mViewStub 仍然没有充气,我尝试通过以下方式充气:

LinearLayout root = ((LinearLayout) mViewStub.inflate());

但在这里我得到异常:

java.lang.IllegalStateException: ViewStub must have a non-null ViewGroup viewParent

查了this answer,发现ViewStub的parent为null时会抛出这个异常。通过调试,我发现它是真的,我的 mViewStub 的父级是 null.

xml 文件很简单:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/root_view"
     android:layout_width="60dp"
     android:layout_height="100dp"
>

    <ViewStub
        android:id="@+id/view_cell_stub"
        android:layout="@layout/item_card"
        android:layout_width="60dp"
        android:layout_height="100dp"/>

</FrameLayout>

我必须提到 ViewStub 对象不会在运行时创建,我只是通过 ViewHolder class.

中的 Id 找到它
ViewStub mViewStub = itemView.findViewById(R.id.view_cell_stub);

最后,经过这个解释,我的主要问题是"why the parent of mViewStub goes null"?

我从 here 看到了 ViewStub 的源代码,我发现只有当父级为 null 或父级不是 ViewGroup 的实例时才会抛出此异常。

所以我再次检查了我的代码,我发现当我膨胀 XML 并将视图传递给 viewHolder 时,仍然没有将视图添加到根目录中,因此父级为空。

我被迫用自己实现的自定义布局替换了 ViewStub。