从listview中删除多个项目

时间:2014-07-22 17:54:46

标签: android android-listview

我正在尝试从listview中删除多个项目,但它只删除了一个元素(即使我选择了多个元素)。列表视图实现android.R.layout.simple_list_item_multiple_choice,其delListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE)。我有一个按钮,在onClick方法中,我首先要检查是否没有选择项目,如果这样提示用户有一些消息。否则,如果选择了某些项目,则删除它们。这就是我到目前为止所做的:

public void onClick(View v) {
            // TODO Auto-generated method stub

            selectItems();
            Intent intent = new Intent(); ...
        }

selectItems函数:

private boolean selectItem() 
{
    String message = "Please select an item!";
    for (int i = 0; i < array.size(); i++)
    {
        if(array.valueAt(i))
        {
            String item = delListView.getAdapter().getItem(array.keyAt(i)).toString();
            Log.i("my_app", item + " selected");
            deleteAdapter.remove(item);
            deleteAdapter.notifyDataSetChanged();
            return false; //item found
        }
    }
    Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
return true; //no item found
}

感谢您的帮助!


我设法解决了我的问题。我的解决方案是:

private void deleteItems() {
    // TODO Auto-generated method stub

    for (int i = (array.size()) - 1; i >= 0; i--)
    {
        if(array.valueAt(i))
        {
            String selected = deleteAdapter.getItem(array.keyAt(i));
            Log.i("my_app", selected + " will be selected");
            deleteAdapter.remove(selectat);
        }
    }

    Intent intent = new Intent();
    intent.putStringArrayListExtra(BUNDLE_DELETE, deleteList);

    setResult(REQUEST_CODE_DELETE_STRING, intent);
    getInstance().finish();

}
private boolean selectItem() 
{
    String message = "Please select an item!";
    for (int i = 0; i < array.size(); i++)
    {
        if(array.valueAt(i))
        {
            String item = delListView.getAdapter().getItem(array.keyAt(i)).toString();
            Log.i("my_app", item + " selected");
            deleteItems();
            return false;
        }
    }
    Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
return true; 
}

我做了一个单独的方法来选择项目并删除它们。然后我简单地在selectItem()中调用了删除方法。在onClick方法中,我调用了selectItem()方法。 感谢大家的帮助! :)

3 个答案:

答案 0 :(得分:0)

从数据地图中删除所有项目后,Notifydata设置已更改。

答案 1 :(得分:0)

1)在onClick()中调用ListView.getCheckedItemPositions()来获取列表或ListView中所选项的位置。 getCheckedItemIds()获取所选项目的ID。

2)然后删除它们。

3)然后在Adapter上调用notifyDataSetChanged()以刷新列表。

答案 2 :(得分:0)

尝试这样的事情:

查看示例:(葡萄牙语链接)http://nglauber.blogspot.com.br/2013/07/listview-com-selecao-multipla-actionbar.html

private boolean selectItem() {

    String item = delListView.getAdapter().getItem(array.keyAt(i)).toString();

    SparseBooleanArray checked =  listView.getCheckedItemPositions();  

    for (int i = checked.size()-1; i >= 0; i--) {  
        if (checked.valueAt(i)) {  

           String item = delListView.getAdapter().getItem(checked.valueAt(i)).toString();
           deleteAdapter.remove(item);  
        }  
    } 

    deleteAdapter.notifyDataSetChanged();

    Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
    return true; //no item found
}

编辑:

  

我首先要验证(何时   如果没有选择任何项目,请按一下按钮。

 mButton.setOnClickListener( new OnClickListener() {

    @Override
    public void onClick( final View v ) {

        SparseBooleanArray checked =  listView.getCheckedItemPositions();

        if ( checked.size() == 0 ) {

            Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();     
        }
    }
} );