Android Kotlin 如何将按钮颜色存储到SharedPreferences中
实现方案
首先注意你现有代码有两处可优化点:
- 点击事件中每个if分支下的
number_of_clicks + 1是无效代码,没有赋值效果可以直接删除,你前面已经执行了number_of_clicks++完成了计数累加 - onSave方法中FachMontag6的findViewById写错了id,写成了R.id.FachMontag5,会导致第6个输入框保存内容异常,建议修正为R.id.FachMontag6
1. 声明全局计数变量
在Activity的onCreate方法外,声明计数变量为全局成员:
private var number_of_clicks = 0
2. onCreate中添加颜色恢复逻辑
在原有读取SharedPreferences输入框内容的逻辑后,添加存储的点击次数读取、颜色恢复代码:
val pref = getPreferences(Context.MODE_PRIVATE) // 原有读取输入框内容的代码不变 // ... // 新增:读取按钮点击次数、恢复颜色 val savedClickCount = pref.getInt("FARBE1_CLICK_COUNT", 0) number_of_clicks = savedClickCount val farbe1 = findViewById<Button>(R.id.farbe1) when(savedClickCount) { 1 -> farbe1.setBackgroundColor(getColor(R.color.white)) 2 -> farbe1.setBackgroundColor(getColor(R.color.yellow)) 3 -> farbe1.setBackgroundColor(getColor(R.color.green)) 4 -> farbe1.setBackgroundColor(getColor(R.color.red)) 5 -> farbe1.setBackgroundColor(getColor(R.color.blue)) 6 -> farbe1.setBackgroundColor(getColor(R.color.purple)) else -> farbe1.setBackgroundColor(getColor(R.color.teal_700)) } // 原有按钮点击事件代码不变 // ...
3. onSave方法中添加计数存储逻辑
和保存输入框内容逻辑一致,在editor.commit()前新增点击次数存储代码:
val pref = getPreferences(Context.MODE_PRIVATE) val editor = pref.edit() // 原有保存输入框内容的代码不变 // ... // 新增:保存按钮点击次数 editor.putInt("FARBE1_CLICK_COUNT", number_of_clicks) editor.commit()
如果后续有多个颜色切换按钮,只需要给每个按钮单独定义对应的SP存储key(比如FARBE2_CLICK_COUNT、FARBE3_CLICK_COUNT),重复上述逻辑即可。
内容的提问来源于stack exchange,提问作者M H
相关产品推荐
相关产品推荐

