web-dev-qa-db-ja.com

チェックボックスの状態が変わったときに何かをする方法は?

これは私のコードです:

    <CheckBox
        Android:id="@+id/sprint_checkbox"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:text="@string/sprint_game" />

    <CheckBox
        Android:id="@+id/marathon_checkbox"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:text="@string/marathon" />

    <CheckBox
        Android:id="@+id/never_ending_checkbox"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:text="@string/never_ending" />

私がやりたいのは、これらの1つがチェックされたときに「検出」し、他の2つを「無効」に設定して、ユーザーが一度に1つしか選択できないようにすることです。 「.setOnCheckedChangeListener」を使おうとしましたが、それができません。誰かがコードを手伝ってくれませんか?どうもありがとう!

11
hyperloris

これは、チェックされた変更について通知される方法です。

CheckBox check = findViewById(R.id.sprint_checkbox);
check.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            //do stuff

        }
    });

アクティビティにOnCheckedChangeListenerインターフェイスを実装させてから、次のことを行うこともできます。

CheckBox check1 = findViewById(R.id.sprint_checkbox);
CheckBox check2 = findViewById(R.id.marathon_checkbox); 
CheckBox check3 = findViewById(R.id.never_ending_checkbox);

check1.setOnCheckedChangeListener(this);
check2.setOnCheckedChangeListener(this);
check3.setOnCheckedChangeListener(this);

インターフェイスメソッドのオーバーライド:

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    switch(buttonView.getId()){
               case R.id.sprint_checkbox:
                 //do stuff
               break;
               case R.id.marathon_checkbox:
                 //do stuff
               break;
               case R.id.never_ending_checkbox:
                //do stuff
               break;

            }

}
28
Stefano Ortisi
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

    int id = buttonView.getId();

    if(isChecked){
       switch(id){
          case R.id.sprint:
          //add to database
          ...
       }
    }
    else{
      switch(id){
          case R.id.sprint:
          //remove from database
          ...
       }
   }
}

これにより、IDを使用できるようになります。それがうまくいくことを願っています。

1
Twahanz

RadioButtonがあなたの目的により適していると思います。

<RadioGroup
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:orientation="vertical"
    Android:id="@+id/radio_group1">
    <RadioButton
        Android:id="@+id/sprint"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="@string/rad_option1"
        Android:checked="true"
    Android:onClick="onRadioButtonClick"
        />
    <RadioButton
        Android:id="@+id/marathon"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="@string/rad_option2"
        Android:onClick="onRadioButtonClick"
         />
    <RadioButton
        Android:id="@+id/neverending"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="@string/rad_option3"
        Android:onClick="onRadioButtonClick"
         />
</RadioGroup>

次に、コードで:

public void onRadioButtonClick(View v) {
    RadioButton button = (RadioButton) v;
    // DO YOUR THING HERE DEPENDING ON WHICH RADIOBUTTON IS PICKED
}

この場合、他のオプションを無効にすることに対処する必要はありません。デフォルトでは、ユーザーが選択できるオプションは1つだけです。

1
Erol