对话框而不是上下文菜单

时间:2013-04-13 04:29:47

标签: android android-contextmenu

我有一个程序,显示通过内容提供商从数据库中提取的记录列表。

我在列表视图上的任何项目上按下长按时会显示一个内容菜单,可以选择删除该项目。

我想要做的是使用一个对话框 - 这样用户可以选择在删除之前用描述标记该项目。

以下是我的内容菜单的代码:

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {

super.onCreateContextMenu(menu, v, menuInfo);
showDialog(DIALOG_SAB_PRIORITY_ID);
menu.add(0, DELETE_ID, 0, "Returned Item - Remove");

}

选择项目时的代码:

public boolean onContextItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case DELETE_ID:

        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
                .getMenuInfo();
        Uri uri = Uri.parse(BorrowMeContentProvider.CONTENT_URI + "/"
                + info.id);
        getContentResolver().delete(uri, null, null);
        fillData();
        return true;
    }
    return super.onContextItemSelected(item);
}

我应该提一下,我要更改项目,以便不删除它,只标记为已返回。我的对话框如下:

protected Dialog onCreateDialog(int id) {
    AlertDialog dialog;
    switch (id) {
    case DIALOG_SAB_PRIORITY_ID:
        final CharSequence[] items = { "Good Condition", "Bad Condition" };

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Returned Item Condition:")
                .setSingleChoiceItems(items, 0,
                        new DialogInterface.OnClickListener() {
                            // This is the listener that checks to see what
                            // radio button is clicked
                            public void onClick(DialogInterface dialog,
                                    int item) {
                                // Toast.makeText(getApplicationContext(),
                                // Integer.toString(item),
                                // Toast.LENGTH_SHORT).show();

                                if (item == 0) {
                                    // If item returned in good condition
                                    goodBadSwitch = false;
                                } else if (item == 1) {
                                    // If item is returned in bad condition
                                    goodBadSwitch = true;
                                }

                            }
                        })
                .setPositiveButton("OK",
                        new DialogInterface.OnClickListener() {
                            // This is the listener for the button to
                            // dismiss the dialog box
                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {



                                dialog.dismiss();



                            }

                        });

        dialog = builder.create();

        break;
    default:
        dialog = null;
    }
    return dialog;
}

到目前为止,所有这些代码都是在对话框后调用菜单。我只想让对话框取代菜单。

由于

1 个答案:

答案 0 :(得分:0)

如果您想摆脱菜单上下文,那么您可以将对话框的调用移动到列表视图onListItemClick侦听器,如下所示:

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    // other code...
    showDialog(DIALOG_SAB_PRIORITY_ID);
    // other code...
}