当长按 ListActivity
中的项目时,会发生以下方法。我的想法是从数据库中删除该项目,为此我需要调用 mNotesAdapter.deleteNote(ID)
。如果我不使用 AlertDialog
,哪个工作正常;但我应该使用一个来进行删除确认。但我不知道如何将菜单信息或 ID 本身传递给 onClick
方法。
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo)item.getMenuInfo();
switch (item.getItemId()) {
case R.id.contextmenu_item_remove:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure you want to delete this note?");
builder.setPositiveButton("Delete", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// VARIABLE menuInfo IS NOT ACCESSIBLE HERE, NOW WHAT?
mNotesAdapter.deleteNote(menuInfo.id);
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
builder.show();
return true;
}
return super.onContextItemSelected(item);
}
最佳答案
如果您将其标记为final
,您应该能够访问该引用。
要回答您评论中的另一个问题,final
并不意味着对象的内容不能更改。这只是意味着引用不能移动到另一个对象。
当您输入该方法时,您会立即在第一行中创建对新 AdapterContextMenuInfo
的新引用。然后,您将创建一个新的 OnClickListener
,它将仅作用于 menuInfo
正在创建的那个对象。
关于android - 如何将数据从上下文菜单传递到 Android 中的警报对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7573630/