繁体   English   中英

无法从数组列表中正确删除对象

[英]Object is not getting removed properly from Array list

     ICheckBoxClick icheckBoxClick = new ICheckBoxClick() {

        @Override
        public void onCheckCliked(boolean isChecked,String pkgName,int pos) {
        String packageName = cat_name+","+pkgName;
        AppModel appmodel = new AppModel();
        appmodel.pkgName = packageName;
        appmodel.dbId = 0;
           if( isChecked ) {
             selected.add(appmodel);
           } else{
             selected.remove(appmodel);
           }
        }
    };

    appsGrid.setAdapter(new AllAppsSelectionAdapter(actityCtx,icheckBoxClick));
     Button addItems = (Button) dialog.findViewById(R.id.add_applications);
     addItems.setOnClickListener( new OnClickListener() {
        @Override
        public void onClick(View v) {
          iAddSubItemsClick.addClicked( selected );
          dialog.dismiss();
        }
    });

上面的代码有什么问题? 基于isChecked,分别在arrayList中添加对象或从中删除对象。 但是点击确定按钮仍然能够看到其中存在的对象。似乎对象没有被正确删除。

这是您行中的错误。

    AppModel appmodel = new AppModel();
    appmodel.pkgName = packageName;

在这里,您要创建一个新Object并添加或删除。如果isChecked为false,则说明您正在创建一个新object并执行删除操作。但是到目前为止,尚未添加该新创建的对象。该列表..这就是为什么它不删除..

像这样检查并删除..

     else{
           for (AppModel amodel  : selected) {
            if (model.pkgName.equals(packageName)) {
                selected.remove(model);
                break;
            }
          }   
       }

您应该在AppModel类中重写equalshashCode方法。

这是remove方法的工作方式:

删除索引i最低的元素,使得(o == null?get(i)== null:o.equals(get(i))) (如果存在这样的元素)。

删除或添加项目后,通知数据集已更改。 yourAdapter.notifyDataSetChanged()函数可以执行此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM