Kotlin中布尔条件未执行,RecyclerView点击显隐功能实现遇阻
Kotlin中RecyclerView显示/隐藏的布尔条件失效问题排查与修复
问题原因
你的代码逻辑存在核心问题:
- 在
onCreate方法中,你仅执行了一次条件判断。初始化时clicable为true,因此只会给dropdown_lay绑定第一个点击事件监听器。后续修改clicable的值不会触发重新绑定监听器,第二个else if分支的逻辑永远不会被执行。 - 每次点击都创建新的
Category_recycler_view实例是不必要的,会造成资源浪费,也不是实现显示/隐藏的最优方式。
修复方案
将点击事件合并为一个,在每次点击时动态判断clicable状态,同时优化RecyclerView的初始化逻辑,直接通过控制可见性实现显示/隐藏(或按需操作数据):
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_create_event) activity = this@CreateEventActivity var clicable = true // 一次性初始化数据集合 val setData = ArrayList<Category_Spinner_model>().apply { add(Category_Spinner_model(R.drawable.ic_facebook, "Entertainment", R.drawable.ic_dropdown_arrow)) add(Category_Spinner_model(R.drawable.ic__entertainment, "Entertainment", R.drawable.ic_dropdown_arrow)) add(Category_Spinner_model(R.drawable.ic__entertainment, "Entertainment", R.drawable.ic_dropdown_arrow)) } // 初始化RecyclerView和Adapter,仅执行一次 val adapter = Category_recycler_view(setData) category_recycler.apply { layoutManager = LinearLayoutManager(this@CreateEventActivity) this.adapter = adapter // 初始状态设为隐藏(根据需求调整) visibility = View.GONE } // 统一设置点击事件监听器 dropdown_lay.setOnClickListener { clicable = !clicable if (clicable) { // 显示RecyclerView category_recycler.visibility = View.VISIBLE // 若之前清空过数据,可在此恢复并通知Adapter更新 // setData.addAll(...) // adapter.notifyDataSetChanged() } else { // 隐藏RecyclerView category_recycler.visibility = View.GONE // 若需要清空数据,执行以下代码(可选) // setData.clear() // adapter.notifyDataSetChanged() } Log.e("clicable->", "$clicable") } }
关键修复点
- 合并点击事件:不再根据初始
clicable值绑定不同监听器,而是在同一个点击回调中动态判断状态,确保每次点击都能触发正确逻辑。 - 复用组件实例:RecyclerView的布局管理器、Adapter仅初始化一次,避免重复创建带来的性能损耗。
- 高效控制显示/隐藏:通过
View.VISIBLE和View.GONE直接控制RecyclerView的可见性,比清空数据更直观高效;若业务需要清空数据,配合adapter.notifyDataSetChanged()即可更新界面。
内容的提问来源于stack exchange,提问作者Gowshik
相关产品推荐
相关产品推荐

