在选中复选框时,元素会添加到数组列表中,但在取消选中它时不会被删除。 我必须在取消选中复选框时从数组列表中删除元素。 我编写了以下代码,请让我知道我错在哪里。
public class CustomAdapter extends BaseAdapter{
NameModel model;
public static ArrayList<NameModel> nameArray;
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater mInflater = (LayoutInflater)context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.item_list, null);
name = (TextView)convertView.findViewById(R.id.name);
cb = (CheckBox)convertView.findViewById(R.id.checkBox1);
cb.setTag(position);
nameArray = new ArrayList<NameModel>();
cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position = (Integer)view.getTag();
CheckBox checkbox = (CheckBox)view;
model = new NameModel(NameList.get(position).getName());
model.setCheckedStatus(checkbox.isChecked());
model.setName(NameList.get(position).getName());
if(checkbox.isChecked()){
CustomAdapter.nameArray.add(model);
Toast.makeText(context, "item checked ", Toast.LENGTH_SHORT).show();
}else{
CustomAdapter.nameArray.remove(model);
Toast.makeText(context, "item unchecked ", Toast.LENGTH_SHORT).show();
}
}
});
}
return convertView;
}
我已将 ArrayList 声明为静态,因为它无法在 getView 方法中访问。
执行时,它会按预期打印两个 toast,但不会在取消选中复选框时删除该元素。
任何有关上述问题的帮助将不胜感激。 提前致谢。
最佳答案
public void onClick(View view) {
model = new NameModel(NameList.get(position).getName());
(...)
CustomAdapter.nameArray.add(model);
(...)
CustomAdapter.nameArray.remove(model);
}
请注意,您总是在 onClick
事件中创建一个新的 Model
对象。除非您的 NameModel
类正确实现 equals()
和 hashcode()
,否则该对象不会从列表中删除 - 仅仅因为它是不在那里!您拥有的是一个列表,其中包含具有相同名称但不同内存地址的对象。
您有两种选择:
在
NameModel
上实现equals()
和hashcode()
,以便Collection
知道您新创建的对象与已有的对象“相同”;遍历列表搜索具有相同名称的元素并将其删除。
关于java - 我必须在取消选中复选框时从数组列表中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32636562/