ViewStub父级变为空

时间:2019-05-11 08:36:27

标签: android android-inflate viewstub

我有一个包含ViewStub的ViewHolder,当我想将数据绑定到视图中时,我首先检查viewStub是否被夸大了?

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

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

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

但是在这里我得到了异常:

  

java.lang.IllegalStateException:ViewStub必须具有非null的ViewGroup viewParent

我检查了this answer,发现当ViewStub的父级为null时,将抛出此异常。通过调试,我发现它是对的,并且我的mViewStub的父级为空。

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类中通过ID找到的。

ViewStub mViewStub = itemView.findViewById(R.id.view_cell_stub);

最后,在解释之后,我的主要问题是“为什么mViewStub的父级为空”?

1 个答案:

答案 0 :(得分:0)

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

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

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