Android ListView中的项中包含RadioGroup时,RadioButton混乱选

转载请注明出处。

ListView中的项每一个都包含一个RadioGroup时,滑动的时候RadioButton混乱选中的问题。

先上代码:

/** * <Title:ProblemAdapter.java> * <Description:> * <Company:> * <Author:Frj> * <Mender:2014-9-2> * <Version:1.0> */package com.example.listviewitemradiogroupdemo;import java.util.ArrayList;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.RadioButton;import android.widget.RadioGroup;import android.widget.RadioGroup.OnCheckedChangeListener;import android.widget.TextView;/** * 功能: */public class ProblemAdapter extends BaseAdapter{private LayoutInflater inflater;private ArrayList<RadioCheck> list;public ProblemAdapter(Context context, ArrayList<RadioCheck> list){inflater = LayoutInflater.from(context);this.list = list;}@Overridepublic int getCount(){return list.size();}@Overridepublic Object getItem(int position){return list.get(position);}@Overridepublic long getItemId(int position){return position;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent){ViewHolder holder = null;RadioCheck check = list.get(position);if (convertView == null){convertView = inflater.inflate(R.layout.adapter_problem, null);holder = new ViewHolder();holder.content = (TextView) convertView.findViewById(R.id.content);holder.option_a = (TextView) convertView.findViewById(R.id.option_a);holder.option_b = (TextView) convertView.findViewById(R.id.option_b);holder.option_c = (TextView) convertView.findViewById(R.id.option_c);holder.option_d = (TextView) convertView.findViewById(R.id.option_d);holder.result_a = (RadioButton) convertView.findViewById(R.id.result_a);holder.result_b = (RadioButton) convertView.findViewById(R.id.result_b);holder.result_c = (RadioButton) convertView.findViewById(R.id.result_c);holder.result_d = (RadioButton) convertView.findViewById(R.id.result_d);holder.radioGroup = (RadioGroup) convertView.findViewById(R.id.radioGroup);convertView.setTag(holder);}else{holder = (ViewHolder) convertView.getTag();}holder.content.setText((position + 1) + "、" + check.getContent());holder.option_a.setText(check.getOptions().get(0));holder.option_b.setText(check.getOptions().get(1));holder.option_c.setText(check.getOptions().get(2));holder.option_d.setText(check.getOptions().get(3));if (RadioCheck.answers[0].equals(check.getAnswer())){holder.radioGroup.check(holder.result_a.getId());}else if (RadioCheck.answers[1].equals(check.getAnswer())){holder.radioGroup.check(holder.result_b.getId());}else if (RadioCheck.answers[2].equals(check.getAnswer())){holder.radioGroup.check(holder.result_c.getId());}else if (RadioCheck.answers[3].equals(check.getAnswer())){holder.radioGroup.check(holder.result_d.getId());}else{holder.radioGroup.clearCheck();}final RadioGroup radioGroup = holder.radioGroup;holder.radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener(){@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId){RadioCheck radioCheck = list.get(position);if (group == radioGroup){switch (checkedId){case R.id.result_a:radioCheck.setAnswer(RadioCheck.answers[0]);break;case R.id.result_b:radioCheck.setAnswer(RadioCheck.answers[1]);break;case R.id.result_c:radioCheck.setAnswer(RadioCheck.answers[2]);break;case R.id.result_d:radioCheck.setAnswer(RadioCheck.answers[3]);break;}}}});return convertView;}class ViewHolder{TextView content;TextView option_a;TextView option_b;TextView option_c;TextView option_d;RadioButton result_a;RadioButton result_b;RadioButton result_c;RadioButton result_d;RadioGroup radioGroup;}}效果图:

很明显的看的出来,当回到1、2题时,1、2题选中的答案混乱了。。。

出现这种情况的根源大家都知道,是由于ListView的缓存机制带来的,那么具体原因在哪儿呢?

我们来看看getView里边的代码:

人要有梦想,有了梦想才会努力奋斗,

Android ListView中的项中包含RadioGroup时,RadioButton混乱选

相关文章:

你感兴趣的文章:

标签云: