RadioGroup Check (id) не запускает setOnCheckedChangeListener в Android

У меня есть радиогруппа, и я динамически добавляю к ней радиокнопки. Я использую radiogroup.check(id) для выбора радиокнопки внутри Radiogroup.

v = new RadioGroup(ctx);
int count = 0;
for (String Str : valueStr.get(Position)) {
    RadioButton rb = new RadioButton(ctx);
    rb.setId(count);
    rb.setTag(valueStrID.get(position).get(count));
    rb.setText(Str);
    if (formFieldObject.getFD_ValueField().equals(String.valueOf(Str))) {
        rbposition = count;
   }
   rb.setTextSize(fontSize);
   ((RadioGroup) v).addView(rb);
   count++;
}

И вызов этого метода для выбора

((RadioGroup) v).check(rbposition);

Но это не вызывает Checkedchangelistener. В чем проблема с кодом?


person Anand Asir    schedule 06.10.2016    source источник
comment
покажите нам, где вы устанавливаете слушателя   -  person Alessandro Verona    schedule 06.10.2016
comment
Я пробовал прослушиватель перед методом проверки, но безуспешно.   -  person Anand Asir    schedule 06.10.2016
comment
Вы пытались установить непосредственно на радиокнопку? RadioButton b = (RadioButton) findViewById(R.id.yourradiobutton); б.setChecked (истина);   -  person Alessandro Verona    schedule 06.10.2016
comment
если я использую setChecked(), он работает. но через check() это не так.   -  person Anand Asir    schedule 06.10.2016
comment
В ответе Pr38y я использовал setChecked() перед добавлением его в радиогруппу. так что взаимный отбор не работает. Теперь это работает. Но до сих пор не удалось заставить его работать с вышеуказанным методом.   -  person Anand Asir    schedule 06.10.2016
comment
@Saret Моя ошибка. Я думаю, то, что вы пришли сказать, правильно. Мы должны установить прослушиватель перед методом check(). Если я даю его в последний раз, он не слушает CheckChange(). Теперь это работает.   -  person Anand Asir    schedule 06.10.2016


Ответы (3)


Позвоните rb.setChecked(true), чтобы проверить это.

v = new RadioGroup(ctx);
int count = 0;
for (String Str : valueStr.get(Position)) {
RadioButton rb = new RadioButton(ctx);
rb.setId(count);
rb.setTag(valueStrID.get(position).get(count));
rb.setText(Str);
rb.setTextSize(fontSize);
((RadioGroup) v).addView(rb);
if (formFieldObject.getFD_ValueField().equals(String.valueOf(Str))) {
    rbposition = count;
    rb.setChecked(true);
}


count++;
}
person Pr38y    schedule 06.10.2016
comment
ранее я пробовал это только с методом setChecked. Но это вызывает у меня проблемы, когда я выбираю следующую радиокнопку. Он отбрасывает свойство взаимного выбора. т.е.) Он показывает, что выбраны оба переключателя. - person Anand Asir; 06.10.2016

мой код работает, просто проверьте. Я думаю, что вы вызываете этот метод перед добавлением RadioButton в RadioGroup, тогда он не должен работать

((RadioGroup) v).check(rbposition);

пожалуйста, проверьте мой код, он работает отлично.

public class ThirdActivity extends AppCompatActivity {

        RadioGroup radioGroup;
        ArrayList<String>valueStr=new ArrayList<>();
    LinearLayout ll;
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.third_activity);
    ll= (LinearLayout) findViewById(R.id.linearLayout);

            valueStr.add("ONE");
            valueStr.add("TWO");
            valueStr.add("THREE");



            radioGroup=new RadioGroup(ThirdActivity.this);
            radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {


                   switch (checkedId){
                       case 0:
                           Toast.makeText(ThirdActivity.this,"RadioButton ONE Selected",Toast.LENGTH_LONG).show();
                           break;
                       case 1:
                           Toast.makeText(ThirdActivity.this,"RadioButton TWO Selected",Toast.LENGTH_LONG).show();
                           break;
                       case 2:
                           Toast.makeText(ThirdActivity.this,"RadioButton THREE Selected",Toast.LENGTH_LONG).show();
                           break;
                   }
                }
            });

            int count = 0;
            for (int i=0;i<valueStr.size();i++) {
                RadioButton rb = new RadioButton(ThirdActivity.this);
                rb.setId(count);
                rb.setTag(valueStr.get(i));
                rb.setText(valueStr.get(i));

                rb.setTextSize(16);

                ((RadioGroup) radioGroup).addView(rb);
                if(count==1){
                    radioGroup.check(count);
                }

                count++;
            }
            ll.addView(radioGroup);
        }
    }
person Kona Suresh    schedule 06.10.2016
comment
Собственно, сначала у меня было только так. но позже изменил его. Мы должны зарегистрировать слушателя перед методом check(). - person Anand Asir; 06.10.2016

v = new RadioGroup(ctx);
int count = 0;
for (String Str : valueStr.get(Position)) {
    RadioButton rb = new RadioButton(ctx);
    rb.setId(count);
    rb.setTag(valueStrID.get(position).get(count));
    rb.setText(Str);
    rb.setTextSize(fontSize);
    ((RadioGroup) v).addView(rb);
    if (formFieldObject.getFD_ValueField().equals(String.valueOf(Str))) {
        rbposition = count;
    }
    count++;
}

((RadioGroup) v).setOnCheckedChangeListener(new android.widget.RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup rg, int arg1) {
        // TODO Auto-generated method stub                                
    }
});

((RadioGroup) v).check(rbposition);

Я даю слушателю перед методом check(), и теперь он работает.

person Anand Asir    schedule 06.10.2016