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按钮我仍然可以看到它中存在的对象。看起来像对象没有被正确删除。
答案 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类中的equals
和hashCode
方法。
以下是remove
方法的工作原理:
删除索引 i 最低的元素,使(o == null?get(i)== null:o.equals(get(i)))(如果存在这样的元素)。
答案 2 :(得分:0)
删除或添加项目后,通知数据集已更改。 yourAdapter.notifyDataSetChanged()函数执行此操作。