如何扩展AlertDialog.Builder结果?

时间:2012-11-11 10:44:08

标签: android alertdialog builder

我需要显示AlertDialog ListViewListView项的上下文菜单。我更喜欢使用AlertDialog.Builder并致电setItems(),因此BuilderListView内为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构建自定义AlertDialog(覆盖onMenuItemSelected方法)?

1 个答案:

答案 0 :(得分:0)

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

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

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