android - ViewStub 在有条件地扩充多个布局时引发错误

标签 android inflate layout-inflater 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 并非设计用于此类场景。 stub 膨胀后, stub 从 View 层次结构中删除。这就是为什么它没有父级并提到 IllegalStateException 引发的原因。 ViewStub 不能多次使用。此外,保持对 ViewStub 的长期引用是不必要的,如果需要,最好在膨胀后将其null,以便 GC 可以吃掉它。

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

关于android - ViewStub 在有条件地扩充多个布局时引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11578653/

相关文章:

android - 从 OpenLibrary API 在 ImageView 中加载图像

android - Xamarin 表单 |安卓 : BitmapDescriptor Error - Image must be a Bitmap

android - ImageView 不以 ConstraintLayout 为中心

android - 在平板电脑上强制关闭和 android.view.InflateException

java - Zlib 压缩在 Java 中使用 Deflate 和 Inflate 类

android - 我可以从未编译的 android XML 中扩充 android Activity 吗?

android - 使用 LayoutInflater 和 AlertDialog

java - 使用 Class.forName 创建静态数组

尝试膨胀自定义布局时,Android Snackbar 不占用全宽

java - 使用 LayoutInflator() 时出现空指针异常?