Android切换按钮状态

时间:2013-04-06 07:51:36

标签: android togglebutton activity-lifecycle

嗨我有一个显示切换按钮的活动。问题是,当我按下设备上的后退按钮然后我回到我的活动时,按钮的状态会被重置。

如何让活动在整个生命周期中“记住”按钮的状态?

3 个答案:

答案 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)中非常重要,因为后者不是生命周期回调的一部分,因此不会在其文档中描述的所有情况下调用。

相关问题