如果长按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);
}
答案 0 :(得分:2)
如果您将参考标记为final
,则应该能够访问该参考。
要回答评论中的其他问题,final
并不意味着无法更改对象的内容。它只是意味着引用不能移动到另一个对象。
当您输入该方法时,您将立即在第一行创建对新AdapterContextMenuInfo
的新引用。然后,您要创建一个新的OnClickListener
,仅对menuInfo
正在创建的一个对象执行操作。