0

我需要为这些项目显示一个AlertDialog带有 aListView和一个上下文菜单ListView。我更喜欢使用AlertDialog.Builder和调用setItems(),所以它为我Builder创建了一个带有风格化布局的ListView内部。AlertDialog对于样式化,它使用内部 Android 资源,因此我无法在我的代码中重新实现它。

问题是我无法捕获上下文菜单项单击事件,因为默认AlertDialog.onMenuItemSelected()实现不会将此类事件转发给父级:

public boolean onMenuItemSelected(int featureId, MenuItem item) {
    return false;
}

我不能扩展AlertDialog.Builder类并强制它创建我自己的实例,AlertDialog因为onMenuItemSelected()我需要重写AlertDialog.Builder.create()它。但它使用了一个私有P变量,不能从派生类访问:

    public AlertDialog create() {
        final AlertDialog dialog = new AlertDialog(P.mContext, mTheme, false);
        P.apply(dialog.mAlert);
        dialog.setCancelable(P.mCancelable);
        if (P.mCancelable) {
            dialog.setCanceledOnTouchOutside(true);
        }
        dialog.setOnCancelListener(P.mOnCancelListener);
        if (P.mOnKeyListener != null) {
            dialog.setOnKeyListener(P.mOnKeyListener);
        }
        return dialog;
    }

有没有办法强制AlertDialog.Builder构建一个自定义AlertDialogonMenuItemSelected方法被覆盖)?

4

1 回答 1

0

我仍然没有找到问题的解决方案,但是我发现了一些问题,这使得解决方案毫无用处。对于 Android 2.1,内置ListView项目 (android.R.layout.select_dialog_item) 显示为深灰色背景上的黑色文本,ListView项目不与对话框消息 ( setMessage()) 分离等。

我终于切换回我自己AlertDialog的自定义布局ListView及其项目(AlertDialog.Builer未使用)。通过这种方式可以轻松捕获上下文菜单事件。

Luksprog,非常感谢您的评论。但主要想法是尽可能多地使用风格化布局。AFAIK,没有标准布局(android.R.layout.*)提供您提到的按钮。此外,有时可以使用按钮删除项目。使用上下文菜单,至少需要两次单击才能删除项目。

于 2012-11-11T16:40:03.547 回答