android – ViewStub会在有条件地膨胀多个布局时引发错误

在我的应用程序中,我有一个微调器和一个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不适用于此类场景.存根膨胀后,将从视图层次结构中删除存根.这就是它没有父级并提到IllegalStateException的原因. ViewStub不能多次使用.如果需要,也不需要长时间引用ViewStub,最好在膨胀后将其置空,这样GC就可以吃掉它.

考虑使用addView()/ removeView()来替换您的视图.或者更好地使用ViewFlipper.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...