我正在尝试从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()
方法。
感谢大家的帮助! :)
答案 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();
}
}
} );