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。
我有一个包含 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.
ViewStub mViewStub = itemView.findViewById(R.id.view_cell_stub);
最后,经过这个解释,我的主要问题是"why the parent of mViewStub
goes null"?
我从 here 看到了 ViewStub
的源代码,我发现只有当父级为 null 或父级不是 ViewGroup 的实例时才会抛出此异常。
所以我再次检查了我的代码,我发现当我膨胀 XML 并将视图传递给 viewHolder 时,仍然没有将视图添加到根目录中,因此父级为空。
我被迫用自己实现的自定义布局替换了 ViewStub。