2014-01-17 26 views
0

我想为我的干预模型创建适配器。 项目将有两个带复选框的文字浏览。干预模式只有很多字符串字段。 我的适配器扩展Basedapter:带复选框的适配器选中随机项目

public class CBAdapter extends BaseAdapter { 

private LinkedList<Intervention> mData; 
private Context mContext; 

public CBAdapter(Context context, LinkedList<Intervention> data) { 
    mContext = context; 
    this.mData = data; 
} 

static class ViewHolder { 
    TextView tvTopText; 
    TextView tvLowText; 
    CheckBox checkbox; 
} 

@Override 
public int getCount() { 
    return mData.size(); 
} 

@Override 
public Intervention getItem(int position) { 
    return mData.get(position); 
} 

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

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder viewHolder; 
    if (convertView == null) { 
     viewHolder = new ViewHolder(); 
     convertView = LayoutInflater.from(mContext).inflate(R.layout.intervention_select_item, 
       null); 
     viewHolder.tvTopText = (TextView) convertView.findViewById(R.id.tvTopText); 
     viewHolder.tvLowText = (TextView) convertView.findViewById(R.id.tvBotText); 

     viewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.cbInterCheck); 

     convertView.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 
    final int pos = position; 
    viewHolder.tvTopText.setText(mData.get(position).getName()); 
    viewHolder.tvLowText.setText(mData.get(position).getGlobalInterId()); 

    viewHolder.checkbox 
      .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
        mData.get(pos).setSelected(isChecked); 
       } 
      }); 
    return convertView; 
} 

public void setData(LinkedList<Intervention> data) { 
    this.mData = data; 
    this.notifyDataSetChanged(); 
} 

}

但是当我点击,例如,第三项,它会检查3个13个项目。 什么问题?以及如何使用复选框创建适配器? 。:(

回答

2

您还没有实行“convertView”循环正常此行不会引发错误,但不正确:

viewHolder = (ViewHolder) convertView.getTag(); 

“getTag”返回类型为“对象”,所以它转换,但它不是。“T你想要的它应该是:

viewHolder = (ViewHolder) convertView; 

那么你的观点应该每个人都有自己的CheckBox