我有一个带复选框的列表视图。 我单击特定的项目,将选中相应的复选框,但它还会在列表视图中每隔8-10行后重复选择复选框。 我了解发生这种情况是因为在android系统中,仅针对可见屏幕的视图被存储用于内存优化。 但是我无法克服这种情况。 请建议。
public class FBFriendsListAdaptor extends ArrayAdapter{
private final Context context;
private static List items;
private SparseArray checkedItems = new SparseArray();
ViewHolder holder;
public FBFriendsListAdaptor(Context context, List items) {
super(context, R.layout.fb_friend_list, items);
this.items = items;
this.context = context;
}
@Override
public FBFriendItem getItem(int position) {
// TODO Auto-generated method stub
return items.get(position);
}
public View getView(final int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.fb_friend_list, parent, false);
}
holder = new ViewHolder();
holder.selectFriendCB = (CheckBox)v.findViewById(R.id.selectFriendCB);
v.setTag(holder);
v.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
if (checkedItems.get(position) != null){
checkedItems.remove(position);
holder.selectFriendCB.setChecked(false);
}
else {
checkedItems.put(position, items.get(position));
holder.selectFriendCB.setChecked(true);
}
}
});
FBFriendItem item = items.get(position);
TextView firstNameTV = (TextView) v.findViewById(R.id.firstNameTV);
TextView lastNameTV = (TextView) v.findViewById(R.id.lastNameTV);
ImageView picIV = (ImageView) v.findViewById(R.id.picIV);
if (!item.getFbId().isEmpty()) {
firstNameTV.setText(" " + item.getFirstName());
lastNameTV.setText(" " + item.getLastName());
Bitmap image = item.getImage();
if(image != null) {
picIV.setImageBitmap(image);
}
}
return v;
}
public SparseArray getCheckedItems(){
return checkedItems;
}
static class ViewHolder {
CheckBox selectFriendCB;
}
}