Выбор двух радиокнопок в Radio Group

введите здесь описание изображения

В группе переключателей выбираются две кнопки.
Я не знаю, где я ошибаюсь. Пожалуйста, помогите мне.

final RadioGroup rg=new RadioGroup(Survay_MainActivity.this);
rg.clearCheck();
rg.setId(Integer.valueOf(entry1.getKey()));  
Log.v("rg getid", "rg"+rg.getId());
for(int i =0;i<values.size();i++){
    // Create Button
    final RadioButton btn = new RadioButton(Survay_MainActivity.this);
    btn.setId(i);
    btn.setTextColor(Color.parseColor("#000000"));
    btn.setBackgroundColor(Color.TRANSPARENT);
    btn.setGravity(Gravity.LEFT);
    btn.setText(values.get(i));

    rg.addView(btn);
    btn.setLayoutParams(params);
    btn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            JSONObject quesAns = new JSONObject();
            String ans=btn.getText().toString().trim();
            try {
                quesAns.put(String.valueOf(rg.getId()), ans);
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            jsonarray.put(quesAns);    
            Log.v("jsonarray", "jsonarray"+jsonarray);
        }
    });
}     
views.addView(rg);     

1) Я создаю RadioGroup вне цикла.

2) Добавление переключателя в RadioGroup в цикле for

3) Когда цикл завершается, RadioGroup добавляется к linerlayout.


person user2332087    schedule 01.08.2014    source источник
comment
Вы создаете новую кнопку каждый раз в цикле, и поскольку вы объявили ее окончательной, вы можете получить к ней доступ внутри обработчика onClick, однако это плохо, потому что вы каждый раз воссоздаете кнопку - btn относится к последней кнопке, созданной не тот, который был создан, когда вы прошли цикл.   -  person simo.3792    schedule 01.08.2014
comment
Каково значение entry1.getKey()?   -  person Willie Nel    schedule 01.08.2014
comment
Как уже упоминалось Симо, вы создаете последнюю кнопку и неправильно обращаетесь к ней. final на самом деле полезен, но не в этом случае - вы получаете ту же кнопку, которая передается методу onClick, поэтому лучше используйте ее. Затем вы должны использовать onCheckChangeListener для RadioGroup вместо onclick для RadioButton. Я не знаю, почему две отмеченные кнопки, но попробуйте сначала исправить эти две проблемы. О, и обе группы, похоже, имеют одинаковый идентификатор.   -  person Marius    schedule 01.08.2014


Ответы (5)


Вам просто нужно изменить разные идентификаторы для разных переключателей. В файле gen может быть некоторый конфликт идентификаторов. Переключатель1: android:id="@+id/one Переключатель2: android:id="@+id/two" Переключатель3: android:id="@+id/three"

Надеюсь, это поможет.

person Mohammad Kamran    schedule 10.06.2015
comment
Эта проблема возникает на случайных устройствах. как только я дал идентификаторы RadioButtons, это сработало - person Ghanshyam Nayma; 21.07.2019

Есть некоторые вещи, неуместные в этих изменениях, которые вы должны разобрать.

1. Замените OnClickListener на OnCheckChangeListener

2. Снимите флажок radioGroup после добавления всех radioButtons и перед добавлением его в LinearLayout.

person Pradeep Yaduvanshy    schedule 01.08.2014

Ваша проблема связана с тем, что вы устанавливаете идентификатор для своих предметов вручную.

rg.setId(Integer.valueOf(entry1.getKey()));  
btn.setId(i);

Android работает с автоматически сгенерированными идентификаторами, которые отличаются. При установке идентификатора вручную может случиться так, что вы дадите один и тот же идентификатор группе переключателей и переключателю. Я использовал ваш код и установил идентификатор группы 3 и радио от 0 до 4.
Излишне говорить, что после того, как я нажму кнопку с идентификатором 3, она всегда останется включенной, потому что группа имеет тот же идентификатор. Итак, попробуйте удалить часть настройки идентификатора или, если вы настаиваете, убедитесь, что у вас всегда есть разные идентификаторы.

person cosmincalistru    schedule 01.08.2014

Я столкнулся с той же проблемой. Причина в том, что идентификатор RadioGroup такой же, как у одного из RadioButtons.

person Cuong Nguyen    schedule 18.01.2017

проблема в этой строке. вы не отправили, где этот код принадлежит. когда вы выйдете из этой области и вернетесь, вы создадите новый RadioGroup. У вас должна быть одна и только одна RadioGroup, чтобы RadioButton имели одну и ту же RadioGroup, и по умолчанию будет выбрана одна из них. Для этого вы можете определить RadioGroup в XML и использовать его для определения переменной для него RadioGroup rg = (RadioGroup) findViewById(R.id.YOURNAME); или вы можете определить свою RadioGroup как переменную экземпляра (глобальную).

final RadioGroup rg=new RadioGroup(Survay_MainActivity.this);
person Mehran Zamani    schedule 08.04.2017