在setOnCheckedChangeListener中的选项卡之间滚动时,radioGroup复制我的Array

时间:2019-07-02 10:58:57

标签: android android-fragments android-adapter

朋友,我有以下问题。我有一个带有两个标签(A和B)的片段。在选项卡A中,我有一个列表视图,每行显示一个包含5个单选按钮的radioGroup。我需要的是在ArrayList中捕获选中的radioGroup,但是我做得不好。

我要做的是使用setOnCheckedChangeListener方法捕获选定的radioButton,并根据选定的单选按钮将元素添加到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]

它两次将数组列表加倍。 我试图用setOnClickListener替换setOnCheckedChangeListener,但是效果不佳。

是否有解决此问题的建议?

1 个答案:

答案 0 :(得分:0)

我设法解决了。为此,我只需要用.set方法替换.add方法,然后将不同的radioButtons设置为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();启动适配器时也要清理阵列,以便在更改选项卡并返回时不会重复记录。

可能有一种更有效的方法,但是效果很好。

谢谢!