重置Android中的所有复选框

时间:2017-03-07 07:04:27

标签: android checkbox

我正在执行一个复选框活动,它会保存复选框状态,并有一个按钮来重置所有复选框。

我坚持如何取消选中所有选中的复选框。 我找到了关于如何做的代码,但是当我点击按钮时没有任何反应。我试图先做一个复选框,但没有成功。我做错了什么?

我尝试做的未经检查的代码低于所有代码。

这是我的代码:

public class PreDiveBK extends Activity implements CompoundButton.OnCheckedChangeListener {
Button btn;
CheckBox cb1, cb2, cb3, cb4, cb5, cb6, cb7, cb8, cb9, cb10, cb11, cb12, cb13,
        cb14, cb15, cb16, cb17, cb18, cb19, cb20, cb21, cb22, cb23, cb24;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.predbk);

    cb1 = (CheckBox) findViewById(R.id.cb1);
    cb1.setChecked(getFromSP("cb1"));
    cb1.setOnCheckedChangeListener(this);
    cb2 = (CheckBox) findViewById(R.id.cb2);
    cb2.setChecked(getFromSP("cb2"));
    cb2.setOnCheckedChangeListener(this);
    cb3 = (CheckBox) findViewById(R.id.cb3);
    cb3.setChecked(getFromSP("cb3"));
    cb3.setOnCheckedChangeListener(this);
    cb4 = (CheckBox) findViewById(R.id.cb4);
    cb4.setChecked(getFromSP("cb4"));
    cb4.setOnCheckedChangeListener(this);
    cb5 = (CheckBox) findViewById(R.id.cb5);
    cb5.setChecked(getFromSP("cb5"));
    cb5.setOnCheckedChangeListener(this);
    cb6 = (CheckBox) findViewById(R.id.cb6);
    cb6.setChecked(getFromSP("cb6"));
    cb6.setOnCheckedChangeListener(this);
    cb7 = (CheckBox) findViewById(R.id.cb7);
    cb7.setChecked(getFromSP("cb7"));
    cb7.setOnCheckedChangeListener(this);
    cb8 = (CheckBox) findViewById(R.id.cb8);
    cb8.setChecked(getFromSP("cb8"));
    cb8.setOnCheckedChangeListener(this);
    cb9 = (CheckBox) findViewById(R.id.cb9);
    cb9.setChecked(getFromSP("cb9"));
    cb9.setOnCheckedChangeListener(this);
    cb10 = (CheckBox) findViewById(R.id.cb10);
    cb10.setChecked(getFromSP("cb10"));
    cb10.setOnCheckedChangeListener(this);
    cb11 = (CheckBox) findViewById(R.id.cb11);
    cb11.setChecked(getFromSP("cb11"));
    cb11.setOnCheckedChangeListener(this);
    cb12 = (CheckBox) findViewById(R.id.cb12);
    cb12.setChecked(getFromSP("cb12"));
    cb12.setOnCheckedChangeListener(this);
    cb13 = (CheckBox) findViewById(R.id.cb13);
    cb13.setChecked(getFromSP("cb13"));
    cb13.setOnCheckedChangeListener(this);
    cb14 = (CheckBox) findViewById(R.id.cb14);
    cb14.setChecked(getFromSP("cb14"));
    cb14.setOnCheckedChangeListener(this);
    cb15 = (CheckBox) findViewById(R.id.cb15);
    cb15.setChecked(getFromSP("cb15"));
    cb15.setOnCheckedChangeListener(this);
    cb16 = (CheckBox) findViewById(R.id.cb16);
    cb16.setChecked(getFromSP("cb16"));
    cb16.setOnCheckedChangeListener(this);
    cb17 = (CheckBox) findViewById(R.id.cb17);
    cb17.setChecked(getFromSP("cb17"));
    cb17.setOnCheckedChangeListener(this);
    cb18 = (CheckBox) findViewById(R.id.cb18);
    cb18.setChecked(getFromSP("cb18"));
    cb18.setOnCheckedChangeListener(this);
    cb19 = (CheckBox) findViewById(R.id.cb19);
    cb19.setChecked(getFromSP("cb19"));
    cb19.setOnCheckedChangeListener(this);
    cb20 = (CheckBox) findViewById(R.id.cb20);
    cb20.setChecked(getFromSP("cb20"));
    cb20.setOnCheckedChangeListener(this);
    cb21 = (CheckBox) findViewById(R.id.cb21);
    cb21.setChecked(getFromSP("cb21"));
    cb21.setOnCheckedChangeListener(this);
    cb22 = (CheckBox) findViewById(R.id.cb22);
    cb22.setChecked(getFromSP("cb22"));
    cb22.setOnCheckedChangeListener(this);
    cb23 = (CheckBox) findViewById(R.id.cb23);
    cb23.setChecked(getFromSP("cb23"));
    cb23.setOnCheckedChangeListener(this);
    cb24 = (CheckBox) findViewById(R.id.cb24);
    cb24.setChecked(getFromSP("cb24"));
    cb24.setOnCheckedChangeListener(this);

}

private boolean getFromSP(String key) {
    SharedPreferences preferences = getApplicationContext().getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE);
    return preferences.getBoolean(key, false);
}

private void saveInSp(String key, boolean value) {
    SharedPreferences preferences = getApplicationContext().getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putBoolean(key, value);
    editor.apply();
}

@Override
public void onCheckedChanged(CompoundButton buttonView,
                             boolean isChecked) {
    // TODO Auto-generated method stub
    switch (buttonView.getId()) {
        case R.id.cb1:
            saveInSp("cb1", isChecked);
            break;
        case R.id.cb2:
            saveInSp("cb2", isChecked);
            break;
        case R.id.cb3:
            saveInSp("cb3", isChecked);
            break;
        case R.id.cb4:
            saveInSp("cb4", isChecked);
            break;
        case R.id.cb5:
            saveInSp("cb5", isChecked);
            break;
        case R.id.cb6:
            saveInSp("cb6", isChecked);
            break;
        case R.id.cb7:
            saveInSp("cb7", isChecked);
            break;
        case R.id.cb8:
            saveInSp("cb8", isChecked);
            break;
        case R.id.cb9:
            saveInSp("cb9", isChecked);
            break;
        case R.id.cb10:
            saveInSp("cb10", isChecked);
            break;
        case R.id.cb11:
            saveInSp("cb11", isChecked);
            break;
        case R.id.cb12:
            saveInSp("cb12", isChecked);
            break;
        case R.id.cb13:
            saveInSp("cb13", isChecked);
            break;
        case R.id.cb14:
            saveInSp("cb14", isChecked);
            break;
        case R.id.cb15:
            saveInSp("cb15", isChecked);
            break;
        case R.id.cb16:
            saveInSp("cb16", isChecked);
            break;
        case R.id.cb17:
            saveInSp("cb17", isChecked);
            break;
        case R.id.cb18:
            saveInSp("cb18", isChecked);
            break;
        case R.id.cb19:
            saveInSp("cb19", isChecked);
            break;
        case R.id.cb20:
            saveInSp("cb20", isChecked);
            break;
        case R.id.cb21:
            saveInSp("cb21", isChecked);
            break;
        case R.id.cb22:
            saveInSp("cb22", isChecked);
            break;
        case R.id.cb23:
            saveInSp("cb23", isChecked);
            break;
        case R.id.cb24:
            saveInSp("cb24", isChecked);
            break;
    }
}

public void onClick(View v) {
    cb1 = (CheckBox) findViewById(R.id.cb1);
    btn = (Button) findViewById(R.id.predbkReset);

    btn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (cb1.isChecked()) {
                cb1.setChecked(false);
            }
        }
    });
  }
}

2 个答案:

答案 0 :(得分:0)

将这些行移至 onCreate 方法

的末尾
 btn = (Button) findViewById(R.id.predbkReset);

btn.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        if (cb1.isChecked()) {
            cb1.setChecked(false);
        }
    }
}); 

您的 onClick 方法没有意义,因为您没有设置任何onClick侦听器

答案 1 :(得分:0)

您在方法Button R.id.predbkReset中向public void onClick(View v)注册了一个侦听器,但您没有调用此方法。因此,一旦您点击按钮,您的聆听者就永远不会被注册,您将无法得到通知。

尝试重构您的代码:

  1. 将方法public void onClick(View v)重命名为例如public void initResetButton()

    public void initResetButton() {
        cb1 = (CheckBox) findViewById(R.id.cb1);
        btn = (Button) findViewById(R.id.predbkReset);
        btn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                if (cb1.isChecked()) {
                   cb1.setChecked(false);
                }
            }
        });
       }
    
  2. onCreate - 方法中调用新的initResetButton - 方法:

    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.predbk);
        initResetButton();
    
        // Your other stuff
    }