如何在android

时间:2015-07-26 05:08:23

标签: android checkbox

我在StackOverflow上经历了很多问题,但无法使这段代码正常工作。创建活动时始终会选中该复选框。

我的代码:

    @Override
        public void onStart() {
            super.onStart();
            chb1.setChecked(load1());
        }

        @Override
        public void onPause() {
            super.onPause();
            save1(chb1.isChecked());
        }

        @Override
        public void onResume() {
            super.onResume();
           chb1.setChecked(load1());
        }
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_screen_lock);
    chb1 = (CheckBox)  findViewById(R.id.checkBox2);
    chb1.setOnClickListener(new View.OnClickListener()
            {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    if(chb1.isChecked())
                    {
                        SharedPreferences sharedPreferences1 = getPreferences(Context.MODE_PRIVATE);
                        SharedPreferences.Editor editor = sharedPreferences1.edit();
                        editor.putBoolean("checked", true);
                        editor.commit();
    }
private boolean load1() { 
        SharedPreferences sharedPreferences1 = getPreferences(Context.MODE_PRIVATE);
        return sharedPreferences1.getBoolean("checked", false);
    }
private void save1(final boolean isChecked) {

            SharedPreferences sharedPreferences1 = getPreferences(Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPreferences1.edit();
            editor.putBoolean("checked", true);
            editor.commit();
    }

我怎样才能做到这一点?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

你可以这样做:

通过 SharedPreference

保存 CheckBox 的状态

CheckBox的

onClick

SharedPreferences sharedPreferences1 = getSharedPreferences("sp_title", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences1.edit();
editor.putBoolean("checked", chb1.isChecked());
editor.commit();

CheckBox 现在获取 状态

on onCreate()

SharedPreferences sharedPreferences1 = getSharedPreferences("sp_title", Activity.MODE_PRIVATE);
boolean isChecked = sharedPreferences1.getBoolean("checked", false);

复选框现在设置 状态

chb1.setChecked(isChecked);

希望它会对你有所帮助。

答案 1 :(得分:1)

你不需要onStart,因为无论如何它都会运行onResume。

另一点是你在复选框上设置了监听器,只有在选中复选框时才会保存,因此它永远不会设置为false,这就是打开活动时始终检查复选框的原因。

这是一个固定版本,我希望它的工作。 :)

@Override
public void onPause() {
    super.onPause();
    save1(chb1.isChecked());
}

@Override
public void onResume() {
    super.onResume();
    setCheckBoxFromSave();
}

private void setCheckBoxFromSave() {
    bool loadedChecked = load1();
    if (chb1.isChecked() != loadedChecked) {
        chb1.setChecked(loadedChecked);
    }
}

private static final String KEY_CHECKED_SAVE = "checked";

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

    chb1 = (CheckBox) findViewById(R.id.checkBox2);
    setCheckBoxFromSave();
    chb1.setOncheckListener(new CheckBox.OnCheckListener() {
        @Override
        public void onCheck(boolean check) {
            save1(check);
        }
    });
}

private SharedPreferences getSharedPreferences() {
    return PreferenceManager.getDefaultSharedPreferences(this);
}

private boolean load1() { 
    return getSharedPreferences().getBoolean(KEY_CHECKED_SAVE, false);
}
private void save1(final boolean isChecked) {
    SharedPreferences.Editor editor = getSharedPreferences().edit();
    editor.putBoolean(KEY_CHECKED_SAVE, true);
    editor.apply();
}