android - ViewStub 父级变为空
问题描述
我有一个包含 a 的 ViewHolder ViewStub
,当我想将数据绑定到我的视图中时,我首先检查viewStub
之前是否膨胀?
if (mViewStub != null) //still not inflated
然后,如果mViewStub
仍然没有充气,我尝试通过以下方式充气:
LinearLayout root = ((LinearLayout) mViewStub.inflate());
但在这里我得到例外:
java.lang.IllegalStateException:ViewStub 必须有一个非空的 ViewGroup viewParent
我检查了这个答案,发现当ViewStub的父级为null时会抛出这个异常。通过调试,我发现这是真的,并且我的父母mViewStub
为空。
xml 文件很简单,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root_view"
android:layout_width="60dp"
android:layout_height="100dp"
>
<ViewStub
android:id="@+id/view_cell_stub"
android:layout="@layout/item_card"
android:layout_width="60dp"
android:layout_height="100dp"/>
</FrameLayout>
我必须提到ViewStub
对象不是在运行时创建的,我只是在 ViewHolder 类中通过 Id 找到它。
ViewStub mViewStub = itemView.findViewById(R.id.view_cell_stub);
最后,经过这个解释,我的主要问题是“为什么父级mViewStub
变为空”?
解决方案
ViewStub
我从这里看到了源代码,我发现只有当父级为空或父级不是 ViewGroup 的实例时才会引发此异常。
所以我再次查看了我的代码,我发现当我膨胀 XML 并将视图传递给 viewHolder 时,仍然没有将视图添加到 root 中,因此父级为空。
我被迫用我自己实现的自定义布局替换 ViewStub。
推荐阅读
- python - asyncio.wait 的替代方案?
- cython - Cython 编译警告不兼容类型
- ios - Appcenter iOS 安装错误“无法安装此应用,因为无法验证其完整性”
- sql-server - 如何调用表中每一行的过程并将结果写入新列?
- python - 带有重复的 Python 排列
- postgresql - 优化与 lpath 相关的查询的问题
- heroku - 将 Heroku 应用程序连接到 Ionos 域名
- python - lstm 输出的串联
- vba - VBA从另一个Word文档中的指定位置复制到Word中的一个文档(包括)
- c++ - c++) 将一维数组放入二维数组时出现错误