在我的应用程序中,我有一个微调器和一个 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 是在 Activity 的 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>
谁能告诉我哪里出错了。如果您有任何其他解决方案来解决此问题,请分享。
谢谢。
最佳答案
ViewStub
并非设计用于此类场景。 stub 膨胀后, stub 从 View 层次结构中删除。这就是为什么它没有父级并提到 IllegalStateException
引发的原因。 ViewStub
不能多次使用。此外,保持对 ViewStub
的长期引用是不必要的,如果需要,最好在膨胀后将其null
,以便 GC 可以吃掉它。
考虑使用 addView()
/removeView()
替换您的 View 。或者更好地使用 ViewFlipper .
关于android - ViewStub 在有条件地扩充多个布局时引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11578653/