我必须在取消选中复选框时从 arraylist 中删除元素
I have to remove element from arraylist on unchecking the checkbox
元素在选中复选框时添加到 arraylist 中,但在取消选中时不会被删除。
我必须在取消选中复选框时从 arraylist 中删除元素。
我写了下面的代码,请告诉我哪里错了。
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
class 正确实现了 equals()
和 hashcode()
,否则该对象不会从列表中删除 - 仅仅是因为它不存在!您拥有的是一个列表,其中包含一个具有相同名称但内存地址不同的对象。
您有两个选择:
在NameModel
上实现equals()
和hashcode()
,所以Collection
知道你新创建的对象是"the same"已经有一个了;
遍历列表搜索具有相同名称的元素并将其删除。
当你从ArrayList
中删除时,它通过equals()
方法确定要删除的对象。默认情况下,这将使用对象标识。但是,您移除的对象是全新的。因此,它不会与您的集合中的任何元素匹配,并且不会删除任何内容。
适当地覆盖 NameModel
中的 equals()
,您的代码将起作用。
元素在选中复选框时添加到 arraylist 中,但在取消选中时不会被删除。 我必须在取消选中复选框时从 arraylist 中删除元素。 我写了下面的代码,请告诉我哪里错了。
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
class 正确实现了 equals()
和 hashcode()
,否则该对象不会从列表中删除 - 仅仅是因为它不存在!您拥有的是一个列表,其中包含一个具有相同名称但内存地址不同的对象。
您有两个选择:
在
NameModel
上实现equals()
和hashcode()
,所以Collection
知道你新创建的对象是"the same"已经有一个了;遍历列表搜索具有相同名称的元素并将其删除。
当你从ArrayList
中删除时,它通过equals()
方法确定要删除的对象。默认情况下,这将使用对象标识。但是,您移除的对象是全新的。因此,它不会与您的集合中的任何元素匹配,并且不会删除任何内容。
适当地覆盖 NameModel
中的 equals()
,您的代码将起作用。