Android ViewStub必须具有非空的ViewGroup viewParent

Android ViewStub必须具有非空的ViewGroup viewParent,android,viewstub,Android,Viewstub,我正在使用ViewStubs加载布局中的显示数据。因为我正在使用ButterKnife绑定布局组件,所以我有一些自定义类来保存各个viewstub布局的组件,例如一个这样的viewstub如下所示 <ViewStub android:id="@+id/featuredContentStub" android:layout_width="match_parent" android:layout_height="wrap_content" an

我正在使用
ViewStubs
加载布局中的显示数据。因为我正在使用
ButterKnife
绑定布局组件,所以我有一些自定义类来保存各个viewstub布局的组件,例如一个这样的viewstub如下所示

 <ViewStub
      android:id="@+id/featuredContentStub"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:inflatedId="@+id/featuredContent"
      android:layout="@layout/featured_content" />
我将布局充气如下:

if (viewstub != null) {
        View view = viewstub.inflate();
        featuredContentView = new FeaturedContentView(view);
}
上述方法在我的片段中的两个不同位置被调用。它第一次正确充气,但第二次充气失败,原因是
java.lang.IllegalStateException:ViewStub必须具有非空的ViewGroup viewParent


我如何处理这种情况。

Android将ViewStub充气如下:

if (viewstub != null) {
        View view = viewstub.inflate();
        featuredContentView = new FeaturedContentView(view);
}
  • 最初,以与任何其他视图相同的方式将ViewStub添加到视图层次结构中
  • 调用
    充气
    时,用指定的布局替换该视图
  • 这意味着,当代码被第二次调用时,原始的ViewStub对象将从视图层次结构中长期分离,并已被完整视图替换


    就我个人而言,我认为ViewStub当前的形式非常不方便,尤其是在使用ButerKnife时。幸运的是,该类本身非常简单,您始终可以创建一个自定义类,该类也可以这样做,并向其添加任何必需的方法(例如
    isInflated
    addInflateCallback
    等)。Android支持库开发人员也做了同样的事情,顺便说一句。

    你能发布你的整个片段代码吗,我对你的
    视图存根有疑问。膨胀()
    黄油不是这样的。。。我试过不用黄油刀,我也面临同样的问题