0

AlertDialogアイテムのListViewとコンテキストメニューを表示する必要がありListViewます。AlertDialog.Builder私はを使用して呼び出すことを好むsetItems()ので、は私のために様式化されたレイアウトで内部Builderを作成します。様式化のためにそれは内部のAndroidリソースを使用するので、コードに再実装することはできません。ListViewAlertDialog

問題は、デフォルトの実装のためにコンテキストメニュー項目のクリックイベントをキャッチできないことですAlertDialog.onMenuItemSelected()。これは、そのようなイベントを親に転送しません。

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

クラスを拡張して、オーバーライドする必要があるため、オーバーライドされたAlertDialog.Builder独自のインスタンスを作成するように強制することはできません。ただし、派生クラスからはアクセスできないプライベート変数を使用します。AlertDialogonMenuItemSelected()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カスタムレイアウトを使用して自分のものに切り替えました。コンテキストメニューイベントは、この方法で簡単にキャッチできます。ListViewAlertDialog.Builer

Luksprog、コメントありがとうございます。しかし、主なアイデアは、できるだけ多くの定型化されたレイアウトを使用することでした。AFAIK、標準のレイアウト(android.R.layout.*)はあなたが言及したボタンを提供しません。また、ボタンでアイテムをときどき削除することもできます。コンテキストメニューを使用すると、アイテムを削除するために少なくとも2回クリックする必要があります。

于 2012-11-11T16:40:03.547 に答える