Как сделать что-то при изменении состояния флажка?
Это мой код:
<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" />
То, что я хочу сделать, это "обнаружить", когда один из них проверен, а затем установить остальные два "отключить", чтобы пользователь мог выбрать только один.
Я пытался использовать ".setOnCheckedChangeListener", но я не могу этого сделать, может ли кто-нибудь помочь мне с некоторым кодом?
Большое спасибо, ребята!
Ответы
Ответ 1
Это уведомление о проверенных изменениях:
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;
}
}
Ответ 2
Я считаю, что 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
}
В этом случае вам не придется иметь дело с отключением других параметров. По умолчанию пользователь будет выбирать только один вариант.
Ответ 3
@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
...
}
}
}
Это должно позволить вам использовать идентификаторы. Надеюсь, что это сработает.