ViewStub引发错误,同时有条件地膨胀超过一个布局(ViewStub raises error

2019-06-26 10:16发布

在我的应用程序,我有一个微调,和ViewStub,这取决于从微调用户选择的项目,我有膨胀不同的布局,并显示以下微调膨胀的布局。 当我的应用程序启动时,ViewStub成功地膨胀从微调任何项目的第一次选择的布局。 当我试图从微调选择一个新的项目,它提出了以下异常

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

到目前为止我的代码是

@Override
public void onItemSelected(AdapterView<?> pParent, View pView, int pPosition, long pId) {

if(pPosition == 1){
    m_cStub.setLayoutResource(R.layout.text_form);
}else if(pPosition == 2){
    m_cStub.setLayoutResource(R.layout.integer_form);
}
View inflated = m_cStub.inflate();
}

m_cStub是()活性的内部的onCreate创建的ViewStub对象。

这是我的主要布局的XML代码

<RelativeLayout..................>
     <spinner......................./>

     <ViewStub android:id="@+id/dynamic_form_layout"
    android:inflatedId="@+id/dynamic_form_inflated_id"
    android:layout_alignParentBottom="true"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>
</RelativeLayout>

可有人请告诉我在哪里,我错了。 如果您有任何其他的解决办法来解决这个请大家分享。

谢谢。

Answer 1:

ViewStub没有被设计在这样一个方案中使用。 短截线被充气后,将短截线从视图层次结构中移除 。 这就是为什么它没有父,并提到IllegalStateException升高。 ViewStub不能使用超过一次。 同时保持长期参照ViewStub是不必要的,如果需要,它是很好的做法, null充气后,使GC可以吃。

考虑使用addView() / removeView()来代替你的意见。 或者更好地利用ViewFlipper 。



文章来源: ViewStub raises error while inflating more than one layouts conditionally