Kotlin中代码关闭动态创建的scrollView不生效如何解决
问题原因
你遇到的问题主要有两处核心错误:
- 逻辑结构错误:所有业务代码都包在了
if (linearLayout == null)的判断中,只有第一次调用方法、linearLayout还未初始化的时候才会执行内部代码。如果之前已经调用过showSpinner(true)完成了初始化,之后再调用showSpinner(false)时,整个判断块会直接跳过,关闭逻辑根本不会执行。 - 语法&API使用错误:
linearLayout!!.visibility == null这行存在两个问题:- 双等号
==是比较运算符,不能用来赋值,赋值需要用单等号= - Android View的visibility属性不接受null值,可选值只有三个:
View.VISIBLE:控件可见View.INVISIBLE:控件不可见,但仍占用原有布局空间View.GONE:控件不可见,且不占用原有布局空间
- 双等号
修复后的代码
/***************** SCROLL VIEW *****************/ fun showSpinner(show: Boolean) { // 优先完成初始化操作,不要和业务逻辑绑定 if (linearLayout == null) { linearLayout = findViewById(R.id.linear1) } // 单独处理显示/隐藏逻辑 if (show) { val layoutInflater = LayoutInflater.from(this) // 原有填充布局的逻辑保留即可 ... linearLayout?.visibility = View.VISIBLE } else { // 隐藏滚动视图,GONE符合“关闭”的需求,不会占用原有布局空间 linearLayout?.visibility = View.GONE } }
额外注意
- 如果你要完全关闭整个滚动区域,不是只隐藏内部的LinearLayout,也可以直接给外层的
HorizontalScrollView或者id为myScrollView的RelativeLayout设置visibility为View.GONE,效果和隐藏内部布局一致,根据你的业务需求选择即可。 - 代码中尽量用安全调用符
?.代替!!空断言,避免出现空指针异常导致应用崩溃。
内容的提问来源于stack exchange,提问作者LastCard1440
相关产品推荐
相关产品推荐

