如何将数据从上下文菜单传递到Android中的警报对话框?

时间:2011-09-27 18:00:35

标签: android contextmenu alertdialog listactivity

如果长按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);
}

1 个答案:

答案 0 :(得分:2)

如果您将参考标记为final,则应该能够访问该参考。

要回答评论中的其他问题,final并不意味着无法更改对象的内容。它只是意味着引用不能移动到另一个对象。

当您输入该方法时,您将立即在第一行创建对新AdapterContextMenuInfo的新引用。然后,您要创建一个新的OnClickListenermenuInfo正在创建的一个对象执行操作。