当用户单击按钮时,它会将sharedpreference对象中的布尔值切换为true / false。当我稍后在活动中访问该状态时,该状态将被保存并正常工作。但是,当我单击Android的后退按钮暂停该应用程序,然后再次恢复该应用程序时,SharedPreference对象将切换为true。即使当我用调试器检查onPause()方法时它是错误的。
基本上,我尝试在我的活动的onPause,onCreate和onResume方法中检查SharedPreference对象的状态。我不确定在onCreate方法期间为什么将值切换回其默认值(true)。
override fun onPause() {
super.onPause()
val p = pauseButtonTracker.pauseButtonStateAtResume() // value is false
}
override fun onResume() {
super.onResume()
val q = pauseButtonTracker.pauseButtonStateAtResume() // value is switched to true
//...
//用于管理我正在谈论的共享首选项对象的对象
class PauseButtonTracker(context: Context) {
private val PAUSE_BUTTON_TRACKER = "PAUSE_BUTTON_TRACKER"
private val WAS_AT_RESUME = "WAS_AT_RESUME"
private val pauseTracker = context.getSharedPreferences(PAUSE_BUTTON_TRACKER, 0)
private val pauseTrackerEditor = pauseTracker.edit()
fun pauseButtonStateAtResume(): Boolean{
return pauseTracker.getBoolean(WAS_AT_RESUME, true)
}
fun switchPauseButtonStateToPause(){
pauseTrackerEditor.putBoolean(WAS_AT_RESUME, false)
pauseTrackerEditor.apply()
}
fun switchPauseButtonStateToResume(){
pauseTrackerEditor.putBoolean(WAS_AT_RESUME, true)
pauseTrackerEditor.apply()
}
}
中包含的值
pauseButtonTracker.pauseButtonStateAtResume()
在调用onResume时应该保持为假,但由于某种原因它会切换为true。
答案 0 :(得分:2)
在称为onPause()
的第一次活动中,
您应该打电话给switchPauseButtonStateToPause
在val p = pauseButtonTracker.pauseButtonStateAtResume()
之前
,然后调用onResume()
方法。
答案 1 :(得分:0)
糟糕,解决方案是将调试器放在
上fun switchPauseButtonStateToResume(){
pauseTrackerEditor.putBoolean(WAS_AT_RESUME, true)
pauseTrackerEditor.apply()
}
查看它是否由于某种原因被调用。
事实证明,它是从主活动中调用的,正好是通过暂停/恢复按钮切换到活动之前。因此,如果用户单击暂停,然后退出应用程序,然后再次恢复它,它将始终切换回恢复状态。