android - 使用按钮更改 SharedPreference 值
问题描述
我尝试使用 SharedPreference 将数据从 Activity 传递到其片段,并使用按钮更改 SharedPreference 的值。这是我的代码。
teesWhite = findViewById(R.id.tees_white)
teesWhite!!.setOnClickListener {
setWarna(R.drawable.wf, R.drawable.wb)
teesColor!!.setImageResource(R.drawable.ic_color_white)
}
teesBlack = findViewById(R.id.tees_black)
teesBlack!!.setOnClickListener {
setWarna(R.drawable.bf, R.drawable.bb)
teesColor!!.setImageResource(R.drawable.ic_color_black)
}
private fun setWarna(warnaDepan : Int, warnaBelakang : Int) {
depan = this.getSharedPreferences(resources.getString(R.string.app_name), Context.MODE_PRIVATE)
val editor = depan!!.edit()
editor.clear()
editor.putInt(KAOS_DEPAN,warnaDepan)
editor.putInt(KAOS_BELAKANG, warnaBelakang)
editor.apply()
}
编辑 SharedPreference 正在工作并且传递给片段的值(我使用这些值来设置 ImageView 的图像资源)。
kaosdepan = view.findViewById(R.id.kaosdepan)
warnaKaos = activity!!.getSharedPreferences(resources.getString(R.string.app_name), Context.MODE_PRIVATE)
val kaos = warnaKaos!!.getInt(KAOS_DEPAN,0)
kaosdepan!!.setImageResource(kaos)
kaosbelakang = view.findViewById(R.id.kaosbelakang)
val kaos2 = warnaKaos!!.getInt(KAOS_BELAKANG, 0)
kaosbelakang!!.setImageResource(kaos2)
但是更改 SharedPreference 值的按钮不起作用。ImageView 永远不会改变。
解决方案
活动上下文范围与片段的上下文范围不同,因此导致 getInt() 调用的结果不一致。使用getDefaultSharedPreferences
或限定 SharedPreferences 访问权限applicationContext
推荐阅读
- c++ - NTL(数论库)中矩阵的可用内存
- r - 如何在一张图中可视化来自不同模型的系数?
- sql-server - 将 Azure SQL Server 移动到保留 SQL Server 名称的新区域
- kotlin - 每当从目标目录移动文件时,源目录就会被删除 [Kotlin]
- jquery - 如何实现这个我没有得到任何输出
- sql - 数据库设计-正确使用三个表之间的多对多关系?
- omnet++ - 我还需要做什么才能在 Omnet++ 中运行 lwIP 模拟?
- python - 如何使用嵌套 iterrows 优化 pandas 代码
- java - Spring为每个单元测试文件加载上下文
- jsp - 在 Heroku 中部署 Java Web 应用程序时访问文件时出现 NullPointerException