我想从Listview中删除所选项目。我写了这段代码。
int items;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if(requestCode == 1) {
try {
for(int a=0; a<adapter.getPositions().size(); a++) {
applicationInfo = getPackageManager().getApplicationInfo(adapter.getList().get(a), a);
}
} catch(PackageManager.NameNotFoundException e) {
for(int a=0; a<adapter.getPositions().size(); a++) {
items = adapter.getPositions().get(a);
appInfoArrayList.remove(items);
adapter.notifyDataSetChanged();
mActionMode.finish();
}
}
}
else {
}
}
此代码有效但是存在问题:仅删除最后选择的项目。例如,如果单击项目1,2和3,则使用此代码仅删除项目编号3。为什么?在“for”变量的每个循环中,不应该更新“items”变量的内容。
答案 0 :(得分:0)
在
之后使用notifydatasetchanged答案 1 :(得分:0)
在适配器集中删除方法并传递包含要删除的项位置的int数组
public void remove(int[] items) {
for(int position : items) {
// in your case it might be appInfoArrayList.remove(items[position])
Collection.remove(items[position])
}
}
然后在您的活动中
int items[] = new int[adapter.getPositions().size()];
//some code above ...
catch(PackageManager.NameNotFoundException e) {
for(int a=0; a<adapter.getPositions().size(); a++) {
items[a] = adapter.getPositions().get(a);
}
adapter.remove(items);
adapter.notifyDataSetChanged();
mActionMode.finish();
}
想法是获取要移除的位置,然后将此信息传递给适配器以立即删除此位置,然后通知适配器在视图中进行更改。
我猜你不需要试试catch块试试这个:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
int items[] = new int[adapter.getPositions().size()];
if(requestCode == 1) {
for(int a=0; a<adapter.getPositions().size(); a++) {
items[a] = adapter.getPositions().get(a);
}
adapter.remove(items);
adapter.notifyDataSetChanged();
mActionMode.finish();
}
}