12

チェックボックスのグループに何らかの検証を適用しようとしています(たとえば、2つの矛盾するアイテムを一緒にチェックすることはできません)ので、どういうわけかチェックボックスオブジェクトをグループ化し、グループ全体に RequiredFieldValidator のようなものを一度適用し、そのバリデーターで私はリスナーを登録し、Check Boxes オブジェクトのチェック全体を行います。

私が想像するのは、次のようなコードです。

CheckBoxView allMyCheckBoxes = new CheckBoxView(checkbox1,checkbox2,checkbox3); //varargs
validate(allMyCheckBoxes);

Validate には、矛盾するチェック ボックスとすべてのロジックが含まれます。

それはすでにAndroidのどこかに実装されていますか? そうでない場合、誰かがそのようなことを試しましたか? (うまくいけば、ここで私たちと共有します)

4

8 に答える 8

6

このロジックにより、1 つ以上のチェックボックスを選択できます

 private Checkbox day = (checkbox)findviewbyid(R.id.day);
 private Checkbox night =(checkbox)findviewbyid(R.id.night);

 day.setOnCheckedChangeListener(new OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (!night.isChecked() && !day.isChecked()) {
            night.setChecked(true);
        }

    }
});
night.setOnCheckedChangeListener(new OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (!day.isChecked() && !night.isChecked()) {
            day.setChecked(true);
        }

    }
});
于 2012-12-19T16:53:33.103 に答える
3

これが私がしたことです。これがうまくいくかどうかはわかりませんが、最初に使用できるものです。私のチェックボックス チェックリスナーには必要ありませんが、必要に応じてそれぞれに追加できます

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private CheckBox chk1, chk2, chk3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    chk1 = (CheckBox) findViewById(R.id.checkbox1);
    chk2 = (CheckBox) findViewById(R.id.checkbox2);
    chk3 = (CheckBox) findViewById(R.id.checkbox3);
    if (chk1.isChecked()) {
        chk1.setChecked(false);
    }
        else if(chk2.isChecked()){
          chk2.setChecked(false);
         }
    else {
        chk3.setChecked(false);
    }
    chk1.setOnClickListener(this);
    chk2.setOnClickListener(this);
    chk3.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
    switch(view.getId()){
        case R.id.checkbox1:
        chk1.setChecked(true);
        chk2.setChecked(false);
        chk3.setChecked(false);
        break;
        case R.id.checkbox2:
        chk2.setChecked(true);
        chk3.setChecked(false);
        chk1.setChecked(false);
        break;
        case R.id.checkbox3:
        chk3.setChecked(true);
        chk2.setChecked(false);
        chk1.setChecked(false);
        break;
    }
    }
}
于 2013-01-24T19:37:23.677 に答える
3

ラジオ ボタンを使用して、さまざまなグループを設定できます。

このドキュメントこのチュートリアルは、ラジオ ボタンが最適な方法であることがわかった場合に役立ちます。

于 2012-04-12T13:13:53.653 に答える
0

ButterKnifeライブラリの使用:

@BindViews({R.id.checkbox_1, R.id.checkbox_2, R.id.checkbox_3, R.id.checkbox_4})
List<CheckBox> checkBoxes;
private void setChecked(int id){
        for(int i = 0; i < checkBoxes.size(); i++){
            if(checkBoxes.get(i).getId() != id){
                checkBoxes.get(i).setChecked(false);
            }else{
                checkBoxes.get(i).setChecked(true);
            }
        }
    }

@OnClick({R.id.checkbox_1, R.id.checkbox_2, R.id.checkbox_3, R.id.checkbox_4})
    void onCheckBoxClick(View view){
        switch (view.getId()){
            case R.id.checkbox_1:
                uncheckOthers(view.getId());
                break;

            case R.id.checkbox_2:
                uncheckOthers(view.getId());
                break;

            case R.id.checkbox_3:
                uncheckOthers(view.getId());
                break;

            case R.id.checkbox_4:
                uncheckOthers(view.getId());
                break;
        }
    }
于 2021-03-18T18:35:23.003 に答える