朋友,我有以下问题。我有一个带有两个标签(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,但是效果不佳。
是否有解决此问题的建议?
答案 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();
启动适配器时也要清理阵列,以便在更改选项卡并返回时不会重复记录。
可能有一种更有效的方法,但是效果很好。
谢谢!