[英]In Listview loosing the state of checkbox
When I scroll the listview
, my selected checkbox's
are interchanged 当我滚动listview
,我选择的checkbox's
被互换
My adapter class: 我的适配器类:
public class AdapterInvitePartner extends ArrayAdapter<FindPartnerPojo> {
private LayoutInflater inflater;
private List<FindPartnerPojo> objectList;
private List<String> checkboxCheckedList= new ArrayList<String>();
int i = 0;
public AdapterInvitePartner(Context context, int textViewResourceId,
List<FindPartnerPojo> objects) {
super(context, R.layout.items_find_partners, objects);
this.objectList = objects;
this.inflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
FindPartnerPojo item = objectList.get(position);
final String id=item.getUserid();
if (convertView == null) {
convertView = inflater.inflate(R.layout.items_find_partners, null);
holder = new ViewHolder();
holder.partner_email_addr_textview = (TextView) convertView
.findViewById(R.id.textView_partner_email_addr);
holder.partner_phone_number_textview = (TextView) convertView
.findViewById(R.id.textView_partner_phone_number);
holder.checkbox = (CheckBox) convertView
.findViewById(R.id.partner_checkBox);
holder.checkbox
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
checkboxCheckedList.add(id);
} else {
checkboxCheckedList.remove(id);
}
}
});
convertView.setTag(holder);
i++;
}
// if it's exist convertView then consume it
else {
holder = (ViewHolder) convertView.getTag();
}
holder.partner_email_addr_textview.setText(item.getEmail());
holder.partner_phone_number_textview.setText(item.getPhone_number());
return convertView;
}
static class ViewHolder {
TextView partner_email_addr_textview, partner_phone_number_textview;
CheckBox checkbox;
}
public List<String> getCheckBoxList() {
return checkboxCheckedList;
}
}
Set Adapter: 设置适配器:
adapter = new AdapterInvitePartner(getApplicationContext(),
R.layout.items_find_partners, Constant.findpartnerlList);
partner_listview.setAdapter(adapter);
partner_listview.setCacheColorHint(0);
You have to reset the value of the checkbox manually as the convertView is recycled. 您必须手动重置复选框的值,因为convertView会被回收。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
FindPartnerPojo item = objectList.get(position);
final String id=item.getUserid();
if (convertView == null) {
convertView = inflater.inflate(R.layout.items_find_partners, null);
holder = new ViewHolder();
holder.partner_email_addr_textview = (TextView) convertView
.findViewById(R.id.textView_partner_email_addr);
holder.partner_phone_number_textview = (TextView) convertView
.findViewById(R.id.textView_partner_phone_number);
holder.checkbox = (CheckBox) convertView
.findViewById(R.id.partner_checkBox);
convertView.setTag(holder);
i++;
}
// if it's exist convertView then consume it
else {
holder = (ViewHolder) convertView.getTag();
}
holder.partner_email_addr_textview.setText(item.getEmail());
holder.partner_phone_number_textview.setText(item.getPhone_number());
**holder.checkbox
.setOnCheckedChangeListener(null);
holder.checkbox.setChecked(the_original_value);**
holder.checkbox
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
checkboxCheckedList.add(id);
} else {
checkboxCheckedList.remove(id);
}
}
});
return convertView;
}
Due to view recycling, you have to set all properties that can change explicitly in the getView. 由于视图回收,您必须设置所有可以在getView中显式更改的属性。 In particular, the checked state: 特别是,检查状态:
holder.checkbox.setChecked(checkboxCheckedList.contains(id));
Will check the checkbox if it has been checked before. 如果之前已经检查过,将选中该复选框。
@Override
public int getViewTypeCount() {
return getCount();
}
@Override
public int getItemViewType(int position) {
return position;
}
Add this two methods to your Adapter. 将这两种方法添加到您的适配器。 from here 从这里
https://stackoverflow.com/a/13643704/2042347 https://stackoverflow.com/a/13643704/2042347
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.