You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android Kotlin中使用View Binding精简按钮相关重复代码

代码精简方案

第一步:预收集按钮列表,消除重复绑定逻辑

首先提前把所有同类按钮收集为一个列表,避免逐个调用绑定方法:

//  Fragment/Activity 成员变量
private val pearKindButtons by lazy {
    listOf(
        viewBinding.btnPearKind1,
        viewBinding.btnPearKind2,
        viewBinding.btnPearKind3,
        viewBinding.btnPearKind4,
        viewBinding.btnPearKind5,
        viewBinding.btnPearKind6
    )
}

修改onViewCreated逻辑,批量绑定事件:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    pearKindButtons.forEach { bindSelectEvent(it) }
}

第二步:优化选中逻辑,移除冗余查找操作

原来的实现每次点击都需要通过Tag反复查找视图,性能低且代码冗余,直接操作预收集的按钮列表即可:

private fun bindSelectEvent(selectedBtn: Button) {
    selectedBtn.setOnClickListener {
        pearKindButtons.forEach { btn ->
            val tintRes = if (btn == selectedBtn) R.color.btn_color else R.color.btn_color_off
            btn.backgroundTintList = ContextCompat.getColorStateList(it.context, tintRes)
        }
    }
}

如果业务逻辑必须依赖Tag判断,可调整为以下版本:

private fun bindSelectEvent(selectedBtn: Button) {
    selectedBtn.setOnClickListener {
        val selectedTag = selectedBtn.tag
        pearKindButtons.forEach { btn ->
            val tintRes = if (btn.tag == selectedTag) R.color.btn_color else R.color.btn_color_off
            btn.backgroundTintList = ContextCompat.getColorStateList(it.context, tintRes)
        }
    }
}

进阶优化:无需手动维护按钮列表

如果kindGrid容器内只有这几个选择按钮,可以直接遍历子视图自动收集按钮,后续新增按钮无需修改列表代码:

private val pearKindButtons by lazy {
    viewBinding.kindGrid.children.filterIsInstance<Button>().toList()
}

优化收益

  • 消除了逐个调用绑定方法的重复代码
  • 移除了每次点击时重复执行findViewWithTag的性能开销
  • 逻辑更加聚合,后续新增同类按钮只需在布局中添加即可,无需修改业务代码

内容的提问来源于stack exchange,提问作者GreenHelix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:36:03