Kotlin中如何通过存储按钮ID的列表修改按钮颜色?
解决方法
你的问题核心是列表里存的是按钮的ID(Int类型),但setBackgroundColor是View类的方法,Int类型没有这个方法,所以直接调用会报错。下面给你两种可行的解决思路:
思路一:直接存储Button对象(推荐)
把列表的类型改成存储Button对象,而不是ID,后续直接调用方法即可,更简单安全:
- 修改列表定义:
val move_list: MutableList<Button> = mutableListOf()
- 点击按钮时把Button对象加入列表:
fun for_btn_buba2(view: View){ // 直接添加点击的按钮对象,view就是当前点击的按钮 move_list.add(view as Button) // 也可以直接用控件变量:move_list.add(buba2) }
- 修改颜色时直接调用方法:
move_list[0].setBackgroundColor(Color.parseColor("#FFFC9D45"))
思路二:存储ID,通过ID获取View后修改颜色
如果一定要存储ID,需要先通过ID找到对应的Button对象,再调用方法:
- 列表类型改成存储Int(ID的类型):
val move_list: MutableList<Int> = mutableListOf()
- 点击按钮时添加ID(和你原来的代码一致):
fun for_btn_buba2(view: View){ move_list.add(buba2.id) }
- 修改颜色时,先通过ID获取Button对象:
// 在Activity中直接用findViewById获取控件 val targetButton = findViewById<Button>(move_list[0]) targetButton?.setBackgroundColor(Color.parseColor("#FFFC9D45")) // 用?是避免找不到View的情况,防止空指针异常
额外提醒
- 尽量避免用
Any作为列表类型,这样会丢失类型信息,后续操作需要强制转换,容易出错。用具体类型(比如Button或Int)更符合Kotlin的类型安全特性。 - 如果是在Fragment中,需要用
view?.findViewById或者requireView().findViewById来获取控件。
内容的提问来源于stack exchange,提问作者Ihor Kovt
相关产品推荐
相关产品推荐

