java - 我必须在取消选中复选框时从数组列表中删除元素

标签 java android checkbox arraylist baseadapter

在选中复选框时,元素会添加到数组列表中,但在取消选中它时不会被删除。 我必须在取消选中复选框时从数组列表中删除元素。 我编写了以下代码,请让我知道我错在哪里。

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/

相关文章:

java - 表达式的类型必须是数组类型,但它解析为 ArrayList<Integer>

android - 即使具有公共(public)访问权限也无法访问 AWS 上的公共(public) RDS

android - 将 Android 应用程序的语言更改为阿拉伯语时如何在左侧显示复选框?

android - 如何将 ImageView 的坐标转换为位图的坐标?

checkbox - QML Swipeview动态添加页面

java - 如何在选择每个子项时设置根复选框被选中(GWT)

java - GAE fetchAsync 是否会比请求的生命周期更长?

java - jmf 应用程序出现 NoPlayerException 运行时错误

java - 如果知道时间,如何计算范围内每个月的数据并添加到一个列表

android - Google 登录 - 关闭登录对话框时出现 ApiException 12501