android - Kotlin Android - ViewStub 不能为空
问题描述
我正在使用 aViewStub
将布局动态膨胀为bottom sheet
. 一切正常,除了 ViewStub 一旦膨胀后不能在代码中使用。
例如,一旦我膨胀了一个布局(使用View.VISIBLE
,而不是.inflate()
我不能再使用 View Stub :如果我改变可见性它会给我一个错误。
这是我的代码:
weight_force_button.setOnClickListener {
mechanical_view.layoutParams = layoutParams
mechanical_view.layoutResource = R.layout.sheet_weight_force
mechanical_view.visibility = View.VISIBLE
dialog.state = BottomSheetBehavior.STATE_EXPANDED
}
close_button.setOnClickListener {
dialog.state = BottomSheetBehavior.STATE_COLLAPSED
mechanical_view.visibility = View.GONE
}
这是用户单击weight_force_button
或后的错误close_button
:
java.lang.IllegalStateException:mechanical_view 不能为空
解决方案
ViewStub 的文档:
当 ViewStub 可见,或者调用 inflate() 时,布局资源会膨胀。然后 ViewStub 在其父级中将其自身替换为膨胀的一个或多个视图。因此,在调用 setVisibility(int) 或 inflate() 之前,ViewStub 存在于视图层次结构中。膨胀的 View 使用 ViewStub 的布局参数添加到 ViewStub 的父级。
一旦它被膨胀,它就会从它的父级中移除并被膨胀的布局所取代。
推荐阅读
- android - 检查网络连接时 getSystemService() 上出现 NullPointerException
- javascript - Apollo 客户端未在 Nextjs Lamda 中发送 JWT 不记名令牌
- azure-cosmosdb - 如何利用 Cosmos DB 中的 Change Feed 根据在另一个容器中执行的插入/更新在一个容器中插入/更新?
- julia - 如何从 Julia 的文本文件中读取多项式?
- javascript - Kendo UI 中的数字格式
- graphics - Three.js:分割相机平截头体(如级联阴影映射)
- angular - mat切换按钮在单击后不会改变它的值
- java - 查找两个字符串中的共同字母(Java)
- babeljs - 访问者方法的意外返回值
- javascript - 当消费者不期望承诺时使用异步函数