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

hec*_*ana 1 android

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

Muh*_*rif 5

您可以使用SharedPreferences实现CheckBox,即使应用程序关闭也会保留其状态.

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

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

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;       
    }
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)