为什么OnResume重置我的SharedPreference对象中的值?

时间:2019-01-24 12:11:29

标签: android kotlin

当用户单击按钮时,它会将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。

2 个答案:

答案 0 :(得分:2)

在称为onPause()的第一次活动中,

您应该打电话给switchPauseButtonStateToPause

val p = pauseButtonTracker.pauseButtonStateAtResume()之前

,然后调用onResume()方法。

答案 1 :(得分:0)

糟糕,解决方案是将调试器放在

fun switchPauseButtonStateToResume(){
    pauseTrackerEditor.putBoolean(WAS_AT_RESUME, true)
    pauseTrackerEditor.apply()
}

查看它是否由于某种原因被调用。

事实证明,它是从主活动中调用的,正好是通过暂停/恢复按钮切换到活动之前。因此,如果用户单击暂停,然后退出应用程序,然后再次恢复它,它将始终切换回恢复状态。