radioGroup дублирует мой массив при прокрутке между вкладками в setOnCheckedChangeListener - PullRequest
0 голосов
/ 02 июля 2019

Друзья, у меня следующая проблема.У меня есть фрагмент с двумя вкладками (A и B).На вкладке AI есть вид списка, который в каждой строке показывает радиогруппу, содержащую 5 радиокнопок.Что мне нужно, это захватить проверенную радиогруппу в ArrayList, но я не могу сделать это хорошо.

Что я делаю, так это то, что я перехватываю выбранную кнопку радио с помощью метода setOnCheckedChangeListener и, в зависимости от выбранной кнопки, яя добавляю элементы в ArrayList.

В моем собственном адаптере у меня есть это:

@Override
    public View getView(final int position, final View convertView, ViewGroup viewGroup) {

ArrayList<String> selectedAnswers = new ArrayList<String>();

final RadioGroup radioGroup = (RadioGroup)v.findViewById(R.id.opciones_radio);

final RadioButton radio1 = (RadioButton)v.findViewById(R.id.radioButton1);
        final RadioButton radio2 = (RadioButton)v.findViewById(R.id.radioButton2);
        final RadioButton radio3 = (RadioButton)v.findViewById(R.id.radioButton3);
        final RadioButton radio4 = (RadioButton)v.findViewById(R.id.radioButton4);
        final RadioButton radio5 = (RadioButton)v.findViewById(R.id.radioButton5);


radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, @IdRes int checkedId) {

                switch (checkedId){

                    case R.id.radioButton1 :                        
                        selectedAnswers.add("1");

                        break;

                    case  R.id.radioButton2 :                        
                        selectedAnswers.add("2");

                        break;

                    case R.id.radioButton3 :                       
                        selectedAnswers.add("3");

                        break;

                    case R.id.radioButton4 :                        
                        selectedAnswers.add("4");

                        break;

                    case R.id.radioButton5 :                        
                        selectedAnswers.add("5");

                        break;
                }

                Log.e("RESPUESTA: ", String.valueOf(selectedAnswers));

            }
        });

}

Но это вызывает у меня несколько проблем.

Моя главная проблема заключается в том, что если явыберите разные радиокнопки, и я перейду с вкладки A на вкладку B, Arraylist удваивается.

Например.Этот код возвращает:

E / RESPUESTA :: [1, 2, 5, 1] ​​

Если сейчас я перейду с TAB A на TAB B и вернусь кTAB A, я получаю это:

E / RESPUESTA :: [1, 2, 5, 1, 1, 2, 5, 1, 1, 2, 5, 1] ​​

Это удвоило arraylist в два раза.Я пытался заменить setOnCheckedChangeListener на setOnClickListener, но он не работает должным образом.

Любой совет для решения этой проблемы?

1 Ответ

0 голосов
/ 05 июля 2019

Мне удалось это решить.Для этого мне просто нужно было заменить метод .add на метод .set и поместить различные значения radioButton в true или false, оставив код следующим образом:

radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, @IdRes int checkedId) {

                switch (checkedId){

                    case R.id.radioButton1 :
                        selectedAnswers.set(position, "1");
                        radio1.setChecked(true);
                        radio2.setChecked(false);
                        radio3.setChecked(false);
                        radio4.setChecked(false);
                        radio5.setChecked(false);
                        break;

                    case  R.id.radioButton2 :
                        selectedAnswers.set(position, "2");
                        radio1.setChecked(false);
                        radio2.setChecked(true);
                        radio3.setChecked(false);
                        radio4.setChecked(false);
                        radio5.setChecked(false);
                        break;

                    case R.id.radioButton3 :
                        selectedAnswers.set(position, "3");
                        radio1.setChecked(false);
                        radio2.setChecked(false);
                        radio3.setChecked(true);
                        radio4.setChecked(false);
                        radio5.setChecked(false);
                        break;

                    case R.id.radioButton4 :
                        selectedAnswers.set(position, "4");
                        radio1.setChecked(false);
                        radio2.setChecked(false);
                        radio3.setChecked(false);
                        radio4.setChecked(true);
                        radio5.setChecked(false);
                        break;

                    case R.id.radioButton5 :
                        selectedAnswers.set(position, "5");
                        radio1.setChecked(false);
                        radio2.setChecked(false);
                        radio3.setChecked(false);
                        radio4.setChecked(false);
                        radio5.setChecked(true);
                        break;
                }

Кроме того, также выполняется очистка массива при запуске адаптера.с selectedAnswers.clear();, чтобы записи не дублировались при смене вкладки и возврате.

Возможно, есть более эффективный способ сделать это, но он работает довольно хорошо.

Спасибо вам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...