从listview中删除多个项目

时间:2014-01-18 20:19:59

标签: java android xml listview

我想从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”变量的内容。

2 个答案:

答案 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();
    }
}