每次打开我的应用程序时,如何使复选框保持相同状态?

时间:2012-01-31 13:54:45

标签: android

我的活动上有一个复选框。我想知道每次打开我的应用程序时如何使其状态保持不变(选中/取消选中)。

6 个答案:

答案 0 :(得分:5)

即使应用程序已关闭,您也可以使用SharedPreferences来实现保留其状态的CheckBox。

  • 当用户检查/取消选中CheckBox时,将其状态保存在Shared中 偏好。
  • 每当用户打开您的活动时。读取以前保存的值 共享首选项,并设置复选框的状态。

这是一个示例代码,用于保存复选框状态,即使应用已关闭。

public class TestActivity extends Activity{
    CheckBox checkBox = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        checkBox = (CheckBox) findViewById(R.id.my_check_box);
        boolean isChecked = getBooleanFromPreferences("isChecked");
        Log.i("start",""+isChecked);
        checkBox.setChecked(isChecked);
        checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton view, boolean isChecked) {
                Log.i("boolean",""+isChecked);
                TestActivity.this.putBooleanInPreferences(isChecked,"isChecked");
            }
        });
    }
    public void putBooleanInPreferences(boolean isChecked,String key){
        SharedPreferences sharedPreferences = this.getPreferences(Activity.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean(key, isChecked);
        editor.commit();        
    }
    public boolean getBooleanFromPreferences(String key){
        SharedPreferences sharedPreferences = this.getPreferences(Activity.MODE_PRIVATE);
        Boolean isChecked = sharedPreferences.getBoolean(key, false);
        return isChecked;       
    }
}

<强> main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <CheckBox
        android:id="@+id/my_check_box"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

答案 1 :(得分:1)

checkBox.setChecked(true);
如果您想要最后一个状态,只需将选中的状态写入onPause()方法中的SharedPreferences,然后使用onResume()方法获取状态。

参考:http://developer.android.com/reference/android/widget/CheckBox.html  http://developer.android.com/reference/android/content/SharedPreferences.html

答案 2 :(得分:1)

您最好的选择是在您的应用中实施SharedPreferences并保存其状态。运行应用程序时,您可以从首选项中检索状态,然后选中/取消选中该复选框。

答案 3 :(得分:1)

为了记住应用程序状态,您需要使用onSaveInstanceState()onRestoreInstanceState()方法(有关详细信息,请参阅此answer)以确定是否应检查该框或未经检查......

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  super.onSaveInstanceState(savedInstanceState);
  savedInstanceState.putBoolean("IsCheckboxChecked", _myCheckbox.isChecked());
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  _myCheckbox.setChecked(savedInstanceState.getBoolean("IsCheckboxChecked"));
}

答案 4 :(得分:0)

这是一篇类似的帖子.. SO Qn您可以从那里使用相同的想法。希望这会有所帮助。

答案 5 :(得分:0)

您最好的选择是使用SharedPreference。您可以像这样使用它:

将当前状态保存到共享首选项:

SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit(); //opens the editor
editor.putBoolean("isChecked", true); //true or false
editor.commit(); //saves it in shared preference

然后当您的活动开始时,您可以检查SharedPreference中的值,如下所示:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.yourlayout);

    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);

    CheckBox checkBox = (CheckBox) findViewById(R.id.checkbox_id);
    checkBox.setChecked(sharedPreferences.getBoolean("isChecked", false));
}

希望您可以使用此信息