如何解决使用AlertDialog后无法删除LIstView中的选定项目
这是我的问题:
在我的应用程序中,我为ListView设置了ChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)和MultiChoiceModeListener方法,以便允许用户使用上下文菜单删除列表中的项目。我将以下代码放入onActionItemClicked方法中,一切正常:
@Override
public boolean onPrepareActionMode(ActionMode mode,Menu menu) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
//Clear the list of selected item's id when the user exit the context menu bar.
mSelectedItemIdList.clear();
}
@Override
public boolean onActionItemClicked(ActionMode mode,MenuItem item) {
switch (item.getItemId()){
case R.id.menu_select_delete:
deleteSelectedItem();
mode.finish();
return true;
default:
return false;
}
}
private void deleteSelectedItem(){
int totalRowDeleted = 0;
if (!mSelectedItemIdList.isEmpty()){
for (int i = 0; i < mSelectedItemIdList.size(); i++){
long idInDatabase = mSelectedItemIdList.get(i);
Uri selectedItemUri = ContentUris.withAppendedId(TimeEntry.CONTENT_URI,idInDatabase);
int rowDeleted = getContentResolver().delete(selectedItemUri,null,null);
if (rowDeleted != 0){
totalRowDeleted++;
}
}
}
if (totalRowDeleted == 0){
Toast.makeText(MainActivity.this,getString(R.string.delete_error_message),Toast.LENGTH_SHORT).show();
return;
}
Toast.makeText(MainActivity.this,totalRowDeleted + " " + getString(R.string.delete_success_message),Toast.LENGTH_SHORT).show();
}
但是在我添加AlertDialog进行确认之后,
@Override
public boolean onActionItemClicked(ActionMode mode,MenuItem item) {
switch (item.getItemId()){
case R.id.menu_select_delete:
showDeleteSelectedConfirmationDialog();
mode.finish();
return true;
default:
return false;
}
}
private void showDeleteSelectedConfirmationDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(getString(R.string.delete_selected_confirmation));
builder.setPositiveButton(getString(R.string.confirm),new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,int which) {
deleteSelectedItem();
}
});
builder.setNegativeButton(getString(R.string.cancel),int which) {
if (dialog != null){
dialog.dismiss();
}
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
该应用程序不会崩溃,但是 deleteSelectedItem()无法正常运行!程序以某种方式无法到达方法内部for循环中的内容。也许我犯了一些简单的错误。谁能帮我吗?
解决方法
我解决了这个问题。
每次AlertDialog出现时,都会调用onDestroyActionMode()方法。因此,我删除了onDestroyActionMode()中的代码,并添加了用于删除记录后清除列表的代码。
private void deleteSelectedItem(){
int totalRowDeleted = 0;
if (!mSelectedItemIdList.isEmpty()){
for (int i = 0; i < mSelectedItemIdList.size(); i++){
long idInDatabase = mSelectedItemIdList.get(i);
Uri selectedItemUri = ContentUris.withAppendedId(TimeEntry.CONTENT_URI,idInDatabase);
int rowDeleted = getContentResolver().delete(selectedItemUri,null,null);
if (rowDeleted != 0){
totalRowDeleted++;
}
}
}
if (totalRowDeleted == 0){
Toast.makeText(MainActivity.this,getString(R.string.delete_error_message),Toast.LENGTH_SHORT).show();
return;
}
Toast.makeText(MainActivity.this,totalRowDeleted + " " + getString(R.string.delete_success_message),Toast.LENGTH_SHORT).show();
//Clear the list of selected item's id after delete the records.
mSelectedItemIdList.clear();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。