首页 > 解决方案 > 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 不能为空

标签: androidkotlinviewstub

解决方案


ViewStub 的文档:

当 ViewStub 可见,或者调用 inflate() 时,布局资源会膨胀。然后 ViewStub 在其父级中将其自身替换为膨胀的一个或多个视图。因此,在调用 setVisibility(int) 或 inflate() 之前,ViewStub 存在于视图层次结构中。膨胀的 View 使用 ViewStub 的布局参数添加到 ViewStub 的父级。

一旦它被膨胀,它就会从它的父级中移除并被膨胀的布局所取代。


推荐阅读