我不知道我在这里做错了什么,我有一个由自定义对象配置文件组成的数组列表。当用户单击数组列表中的项目时,相应的对象将被添加或移除到tags数组。
现在发生的事情是当用户点击列表中的某个项目时,复选框将检查并将该项目添加到数组中,如果通过再次单击立即取消选中该框,则会从标记数组中删除该对象HOWEVER如果滚动列表并再次调用视图,则用户然后单击先前检查的项目标记。删除(配置文件)将返回。
这是扩展基础适配器的适配器。
class TagAdapter extends StandardAdapter {
boolean[] checkedItems;
int iconWidth;
public TagAdapter() {
checkedItems = new boolean[items.size()];
registerDataSetObserver(new DataSetObserver() {
@Override
public void onChanged() {
super.onChanged();
updateProperties();
}
});
iconWidth = MyApp.getScreenWidth() / 7;
}
void updateProperties() {
checkedItems = new boolean[items.size()];
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
if (convertView == null) {
convertView = mLayoutInflater.inflate(R.layout.checkin_friend, parent, false);
viewHolder = new ViewHolder();
viewHolder.ivIcon = (CachedImageView) convertView.findViewById(R.id.ivIcon);
viewHolder.tvName = (TextView) convertView.findViewById(R.id.tvName);
viewHolder.cbFriend = (CheckBox) convertView.findViewById(R.id.cbFriend);
convertView.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder) convertView.getTag();
}
final JsonObject item = getItem(position);
final Profile profile = new Gson().fromJson(item, Profile.class);
viewHolder.tvName.setText(profile.getUsername());
if (profile.getIcon() != null) {
viewHolder.ivIcon.set(app.imageContainer + profile.getIcon(), true);
}
else {
viewHolder.ivIcon.setImageDrawable(app.defaultIcon);
}
viewHolder.ivIcon.setLayoutParams(new RelativeLayout.LayoutParams(iconWidth, iconWidth));
viewHolder.cbFriend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
viewHolder.cbFriend.setChecked(checkedItems[position]);
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
boolean current = checkedItems[position];
if (current == true) {
boolean modified = tags.remove(profile);
if(modified == false){
Log.d(MyApp.TAG,"modification was false");
}
}
else {
tags.add(profile);
}
checkedItems[position] = !current;
viewHolder.cbFriend.setChecked(checkedItems[position]);
updateUi();
}
});
return convertView;
}
public class ViewHolder {
CachedImageView ivIcon;
TextView tvName;
CheckBox cbFriend;
}
}
错误发生在convertview上的点击侦听器上。
变量标签是由超类中定义的类型Profile组成的arraylist。
tags = new ArrayList<Profile>();