Android中关于在ListView中使用使用RadioGroup时出现数据错位和混乱的解决方式

当我们在使用ListView的时候,一般都会在getView()方法里面使用item复用的方式,如下:

ViweHolder  view = null;
if(convertView == null){
...
}
....
return convertVew;

当我们在Item有RadioGroup控件 ,或是需要有其他条件来判断当前Item是否需要展示一个或多个控件,当我们随意滑动ListView你会发现本来不满足条件的Item也显示出控件或者是错位等情况。这就是由于复用导致的,解决方式有两种:1、不使用item的复用,2、使用一个HashMap来保存position于数据之间的关系。

//这里以RadioButon为例
public class RadioAdapter extends BaseAdapter {
Map map = new HashMap();

    @Override
    public int getCount() {
        return 0;
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      VIewHolder vh = null;
      if(convertView == null){
      convertView  = LayoutInflater.from(parent.getContext()).inflate(R.layout.radioItem,parent,false);
       holder = createViewHolder(convertView);
       convertView.setTag(holder);
}else{
    vh = convertView.getTag();
}

      vh.radioButton.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                swicth(checkedId){
                  case R.id.x:
                    map.put(position,checkedId);
                    break;
                   case R.id.y:
                    map.put(position,checkedId);
                    break;
                }
            }
        });

  if(map.containsKey(position)){
     if(map.get(position) == R.id.x){
      vh.rbx.setChecked(true);
      }else if(map.get(position) == R.id.y){
       vh.rby.setChecked(true);      
    }
  }else{
     
  }


        return convertView;
    }
}


你可能感兴趣的:(Android中关于在ListView中使用使用RadioGroup时出现数据错位和混乱的解决方式)