嗨,我有一个显示切换按钮的活动。问题是,当我按下设备上的返回按钮然后我回到我的活动时,按钮的状态被重置。
如何使活动在其整个生命周期中“记住”按钮的状态?
嗨,我有一个显示切换按钮的活动。问题是,当我按下设备上的返回按钮然后我回到我的活动时,按钮的状态被重置。
如何使活动在其整个生命周期中“记住”按钮的状态?
在onCreate()
或onResume()
根据您的要求执行此操作:
SharedPreferences preferences = this.getSharedPreferences(Constants.SENDEVENT_PREFERENCE,Context.MODE_PRIVATE);
if(preferences.getBoolean(Constants.SENDEVENT_PREFERENCE_SAVE_LIBRARY, false))
lib.setChecked(true);
在onCheckedChanged
方法中这样做:
if (buttonView == lib) {
if (isChecked) {
prefsEditor.putBoolean(Constants.SENDEVENT_PREFERENCE_SAVE_LIBRARY,
true);
prefsEditor.commit();
} else {
prefsEditor.putBoolean(Constants.SENDEVENT_PREFERENCE_SAVE_LIBRARY,
false);
prefsEditor.commit();
}
}
重置状态的原因是由于Android架构,您的活动被完全破坏然后再次恢复。要存储按钮的状态,您应该在 onSaveInstaceState() 中将其状态保存到 Bundle 中并在 onRestoreInstanceState() 中恢复 - 这些方法是专门为此类任务设计的。
所以答案是你应该用两种方法实现保存/恢复按钮状态:
@Override
protected void onSaveInstanceState (Bundle outState) {
// Your code here
}
@Override
protected void onRestoreInstanceState (Bundle savedInstanceState) {
// Your code here
}
详情见文档:
请注意上表中的“Killable”列——对于那些标记为可终止的方法,在该方法返回后,托管该活动的进程可能随时被系统终止,而无需执行另一行代码。因此,您应该使用 onPause() 方法将任何持久性数据(例如用户编辑)写入存储。此外,方法 onSaveInstanceState(Bundle) 在将 Activity 置于此类后台状态之前被调用,允许您将 Activity 中的任何动态实例状态保存到给定的 Bundle 中,以便稍后在 onCreate(Bundle) 中接收该 Activity需要重新创建。有关流程的生命周期如何与其托管的活动相关联的更多信息,请参阅流程生命周期部分。
您必须将状态保存在持久内存中。我想说,在这种情况下,共享首选项是您的最佳选择。
类似于(在您的活动中使用切换按钮):
public void saveButtonState(boolean pressed) {
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("TOGGLE_BUTTON_STATE", pressed);
editor.commit();
}
然后在 onCreate 中,您可以通过从 SharedPreferences 中读取“TOGGLE_BUTTON_STATE”来设置按钮状态。