在ListView中的列表項中定義checkbox是一個常見手法,不過如果在listview使用了ViewHolder緩存的話就會遇到一個很惡心的問題,就是列表項錯位的問題,為此我想到了一個自認為還算簡單的解決方法,就是在自定義Adapter時加入checkbox.setTag(position)這樣一句代碼。這里checkbox為當前列表項的復選框,position為當前列表項位置。然后為checkbox設置點擊事件,checkbox.setOnClickLinster(this)。最后在onClick(View v)方法中通過switch(v.getTag()){case 1: .......}方式設置點擊事件
我的解決方法:
引入一個ArrayList<Boolean>列表,記錄每一項當前的狀態,然后在getView()中這樣使用:holder.checkBox_3.setChecked(checkPosition_3.get(position));
具體看下面:
我這里一個Item里面有3個CheckBox,所以有三個ArrayList<Boolean>列表。
如果在ListView中存在EditText的話,也會存在錯亂問題。
解決方法 http://blog.sina.com.cn/s/blog_80f8936801012cp7.html
雖然也不那么優美!
我的解決方法:
引入一個ArrayList<Boolean>列表,記錄每一項當前的狀態,然后在getView()中這樣使用:holder.checkBox_3.setChecked(checkPosition_3.get(position));
具體看下面:
private List<Boolean> checkPosition_3,checkPosition_1,checkPosition_0; class ListViewAdapter extends BaseAdapter{ private Context context; public ListViewAdapter(Context context){ this.context=context; checkPosition_3 = new ArrayList<Boolean>(ITEMS); checkPosition_1 = new ArrayList<Boolean>(ITEMS); checkPosition_0 = new ArrayList<Boolean>(ITEMS); for(int i=0;i<ITEMS;i++){ checkPosition_3.add(false); checkPosition_1.add(false); checkPosition_0.add(false); } } public int getCount() { // TODO Auto-generated method stub return model.getItems().size(); } public Object getItem(int position) { // TODO Auto-generated method stub return model.getItems().get(position); } public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public boolean isEnabled(int position) { // TODO Auto-generated method stub return false; } public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub final ViewHolder holder; if(convertView==null){ holder=new ViewHolder(); convertView=LayoutInflater.from(context).inflate(R.layout.simple_list_item_zc14or9, null); holder.serial = (TextView)convertView.findViewById(R.id.serial);//序號 holder.SS = (TextView)convertView.findViewById(R.id.SS);//賽事 holder.ZDandKD = (TextView)convertView.findViewById(R.id.ZDandKD);//主隊 VS 客隊 holder.BSSJ = (TextView)convertView.findViewById(R.id.BSSJ);//比賽時間 holder.checkBox_3 = (CheckBox)convertView.findViewById(R.id.checkBox_3);// holder.checkBox_1 = (CheckBox)convertView.findViewById(R.id.checkBox_1);// holder.checkBox_0 = (CheckBox)convertView.findViewById(R.id.checkBox_0);// convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } ZC instance=model.getItems().get(position); holder.serial.setText(instance.serial); holder.SS.setText(instance.SS); holder.ZDandKD.setText(instance.ZD+" VS "+instance.KD); holder.BSSJ.setText(instance.BSSJ); //為了解決關于ListView+CheckBox,Item超過一屏時數據錯亂 holder.checkBox_3.setId(position); holder.checkBox_3.setChecked(checkPosition_3.get(position)); holder.checkBox_3.setOnCheckedChangeListener(new OnCheckedChangeListener(){ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub int id = buttonView.getId(); checkPosition_3.set(id,isChecked); //賦值 updateTextViewInfo(); } }); holder.checkBox_1.setId(position); holder.checkBox_1.setChecked(checkPosition_1.get(position)); holder.checkBox_1.setOnCheckedChangeListener(new OnCheckedChangeListener(){ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub int id = buttonView.getId(); checkPosition_1.set(id,isChecked); //賦值 updateTextViewInfo(); } }); holder.checkBox_0.setId(position); holder.checkBox_0.setChecked(checkPosition_0.get(position)); holder.checkBox_0.setOnCheckedChangeListener(new OnCheckedChangeListener(){ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub int id = buttonView.getId(); checkPosition_0.set(id,isChecked); //賦值 updateTextViewInfo(); } }); return convertView; } class ViewHolder { TextView serial;//序號 TextView SS;//賽事 TextView ZDandKD;//主隊 VS 客隊 TextView BSSJ;//比賽時間 CheckBox checkBox_3,checkBox_1,checkBox_0; } }
我這里一個Item里面有3個CheckBox,所以有三個ArrayList<Boolean>列表。

如果在ListView中存在EditText的話,也會存在錯亂問題。
解決方法 http://blog.sina.com.cn/s/blog_80f8936801012cp7.html
雖然也不那么優美!
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
