我正在使用ViewStub
将布局动态膨胀为bottom sheet
。一切正常,除了ViewStub一旦膨胀后不能在代码中使用。
例如,一旦我放大了布局(使用View.VISIBLE
,而不是.inflate()
,就不能再使用视图存根:如果更改可见性,则会出现错误。
这是我的代码:
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:机械视图不得为空
答案 0 :(得分:2)
ViewStub的文档:
在使ViewStub可见或调用inflate()时,布局资源会膨胀。然后,ViewStub在其父级中将自己替换为一个或多个膨胀的View。因此,ViewStub存在于视图层次结构中,直到调用setVisibility(int)或inflate()为止。使用ViewStub的布局参数将膨胀后的视图添加到ViewStub的父级。
膨胀后,它将从其父级中移除,并由膨胀后的布局取代。