【发布时间】:2021-06-29 13:40:23
【问题描述】:
在我的活动中,有一个 ViewPager2 加载了一个显示文本的片段和另一个片段,该片段旨在具有诸如显示在另一个片段上的文本大小之类的选项。为了让它不必每次我选择使用SharedPreferences时都设置选项,但它不会生效。代码如下:
class Options : Fragment() {
lateinit var binding: OptionsLayoutBinding
private lateinit var mPreferences: SharedPreferences
val preferencesEditor: SharedPreferences.Editor get() = mPreferences.edit()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mPreferences = this.requireActivity().getSharedPreferences("pref", Context.MODE_PRIVATE)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
binding = OptionsLayoutBinding.inflate(inflater, container, false)
return binding.root
}
override fun onResume() {
super.onResume()
binding.radioGroupTextSize.setOnCheckedChangeListener { group, checkedId ->
preferencesEditor.run{
when (checkedId) {
R.id.textSize_RB1 -> putInt("TXTSZ", 12)
R.id.textSize_RB2 -> putInt("TXTSZ", 14)
R.id.textSize_RB3 -> putInt("TXTSZ", 16)
R.id.textSize_RB4 -> putInt("TXTSZ", 18)
R.id.textSize_RB5 -> putInt("TXTSZ", 20)
}
}
}
override fun onPause() {
super.onPause()
preferencesEditor.apply()
Log.d("PREF", "TEXT SIZE SET TO ${mPreferences.getInt("TXTSZ", 12)}. ")
}
}
.. Log.d() 用于确定问题发生在哪里,日志只说它是 12。似乎 SharedPreferences 没有保存该值,tt 也不会对目标片段产生任何影响旨在以更改的大小显示文本。我想知道 apply() 是否放置错误,所以我尝试在每个单选按钮行为之后放置它,这根本没有改善这种情况。
还有很多其他的值需要保存,但是计算出这一个意味着它们也可以工作,所以我在这里简化了代码。
提前感谢您的帮助!
【问题讨论】:
-
可能您没有使用新值重新创建视图,您的旧实例仍在运行并显示旧值。
-
您是否添加了断点以确保您的 putInt 代码被执行?
-
我发现断点并没有停止代码执行,并检查了 sharedpreferences xml 它根本没有值;完全是空的!