未从Array列表中正确删除对象

时间:2013-12-31 12:06:42

标签: java android arrays

     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中添加和删除对象。但是点击OK按钮我仍然可以看到它中存在的对象。看起来像对象没有被正确删除。

3 个答案:

答案 0 :(得分:2)

这是你的行中的错误..

    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;
            }
          }   
       }

答案 1 :(得分:1)

您应该覆盖AppModel类中的equalshashCode方法。

以下是remove方法的工作原理:

  

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

答案 2 :(得分:0)

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