Как заставить радиогруппу программно выбирать только один Радиобуттон за раз?
Я разрабатываю программно настроить форму, где пользователь может поставить вопрос и добавить несколько параметров с помощью переключателей. Я взял RadioGroup, и я добавляю в него переключатели. Но при выборе я хочу, чтобы только один переключатель выбирался одновременно. Как реализовать его программно. Пожалуйста, помогите мне..
вот мой код
final RadioGroup radioGroup = new RadioGroup(getApplicationContext());
radioGroup.setId(1);
LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
RadioButton radioButtonView = new RadioButton(getApplicationContext());
radioButtonView.setId(i++);
radioButtonView.setText(addnew);
radioGroup.addView(radioButtonView, p);
loption.addView(radioGroup, p);
заранее спасибо,
5 ответов
кажется, что вы делаете новый RadioGroup
для каждого RadioButton
.
вы должны добавить каждый новый RadioButton
к тому же RadioGroup
. The RadioGroup
затем убедитесь, что только один RadioButton
можно выбрать в то время.
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Log.d(TAG, "onCheckedChanged " + buttonView.getId());
mRadioGroup.clearCheck();
if (isChecked) {
mRadioGroup.check(buttonView.getId());
}
}
Я пробовал ту же проблему, когда я вставляю LinearLayout, чтобы поместить радиобутоны в сетку.
Я решил таким образом. Учитывая, что у нас больше Радиогрупп, мы знаем Радиобуттон, который был нажат. По этой причине, просто удалить слушателя из всех ваших RadioGroups, а затем снимите все переключатели, сброс onCheckedChangeListener в свой RadioGroup.
Это мой код:
onCheckedChangeListener= new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {
clearAllRadioButton();
((RadioButton) binding.getRoot().findViewById(i)).setChecked(true);
resetListenerRadioGroup();
}
};
onCheckedChangeListener2 = new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {
clearAllRadioButton();
((RadioButton) binding.getRoot().findViewById(i)).setChecked(true);
resetListenerRadioGroup();
}
};
binding.rg.setOnCheckedChangeListener(onCheckedChangeListener);
binding.rg2.setOnCheckedChangeListener(onCheckedChangeListener2);
private void clearAllRadioButton() {
binding.rg2.setOnCheckedChangeListener(null);
binding.rg.setOnCheckedChangeListener(null);
binding.failed.setChecked(false);
binding.draft.setChecked(false);
binding.sent.setChecked(false);
binding.inbox.setChecked(false);
}
private void resetListenerRadioGroup(){
binding.rg2.setOnCheckedChangeListener(onCheckedChangeListener2);
binding.rg.setOnCheckedChangeListener(onCheckedChangeListener);
}
*Не используйте очистку radioButton () потому что он не отвечает Хорошо при сбросе слушателей.
проверьте это, это будет работать для вас:
Сначала Получить RadioButton:
RadioButton radioBalls = (RadioButton) findViewById(R.id.radioGameInPlayBalls);
RadioButton radioTime = (RadioButton) findViewById(R.id.radioGameInPlayTime);
radioBalls.setOnCheckedChangeListener(this);
radioTime.setOnCheckedChangeListener(this);
сейчас @overide method:
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean c) {
switch (buttonView.getId()) {
case R.id.radioGameInPlayBalls:
if (radioTime.isChecked() && c) {
radioBalls.setChecked(false);
return;
}
radioBalls.setEnabled(c);
break;
case R.id.radioGameInPlayTime:
if (radioBalls.isChecked() && c) {
radioTime.setChecked(false);
return;
}
radioTime.setEnabled(c);
break;
default:
break;
}
}
вы должны проверить переключатель, используя RadioGroup, а не переключатель напрямую. Ниже я заполняю radio group из списка опций и получаю идентификатор переключателя опции для проверки и проверяю соответствующую кнопку после заполнения radio group. То же самое происходит, если вы определяете флажок по индексу.
int checkedId = -1;
for(JsonElement option : options){
RadioButton radioButton = new RadioButton(getContext());
radioGroup.addView(radioButton);
if(checkedOptionId.equals(id)){
checkedId = radioButton.getId();
}
}
radioGroup.check(checkedId);