嗨我有一个显示切换按钮的活动。问题是,当我按下设备上的后退按钮然后我回到我的活动时,按钮的状态会被重置。
如何让活动在整个生命周期中“记住”按钮的状态?
答案 0 :(得分:2)
根据您的要求在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();
}
}
答案 1 :(得分:1)
您必须将状态保存在持久性内存中。在这种情况下,Shared Preferences是你最好的选择。
类似(使用切换按钮在您的活动中):
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”来设置按钮状态。
答案 2 :(得分:1)
为什么重置状态的原因是您的活动被完全销毁,然后由于Android架构而再次恢复。要存储按钮的状态,您应该将其状态保存到onSaveInstaceState()中的Bundle中,并在onRestoreInstanceState()中恢复 - 这些方法专门用于此类任务。
所以答案是你应该用两种方法实现保存/恢复按钮状态:
@Override
protected void onSaveInstanceState (Bundle outState) {
// Your code here
}
@Override
protected void onRestoreInstanceState (Bundle savedInstanceState) {
// Your code here
}
详情见docs:
请注意上表中的“Killable”列 - 对于那些标记为可填充的方法,在该方法返回后,托管该活动的进程可能会在任何时候被系统杀死,而不会执行其代码的另一行。因此,您应该使用onPause()方法将任何持久性数据(例如用户编辑)写入存储。此外,在将活动置于这样的背景状态之前调用onSaveInstanceState(Bundle)方法,允许您将活动中的任何动态实例状态保存到给定的Bundle中,以便稍后在onCreate(Bundle)中接收需要重新创建。有关流程生命周期如何与其托管的活动相关联的详细信息,请参阅流程生命周期部分。请注意,将持久数据保存在onPause()而不是onSaveInstanceState(Bundle)中非常重要,因为后者不是生命周期回调的一部分,因此不会在其文档中描述的所有情况下调用。