0

DialogPreferenceクラスに a を実装しています。ダイアログの正のボタンがクリックされたときに、ダイアログが閉じないようにしてください。この回答のロジックを使用しています。

私が使用するクラスの内部:

protected void onPrepareDialogBuilder(Builder builder) {
    super.onPrepareDialogBuilder(builder);

    final AlertDialog d = builder.create();

    d.setOnShowListener(new DialogInterface.OnShowListener() {

        @Override
        public void onShow(DialogInterface dialog) {

            Toast.makeText(mContext, "inside", Toast.LENGTH_SHORT).show();
            Button b = d.getButton(DialogInterface.BUTTON_POSITIVE);
            b.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View view) {
                    // TODO Do something

                    // Dismiss once everything is OK.
                    d.dismiss();
                }
            });
        }
    });
}

しかし、ダイアログを開くと、 が表示されずToast、ダイアログが閉じます。では、その答えの私の実装はどのように間違っていますか?

4

2 に答える 2

0

あなたの状況は少し異なります。onPrepareDialogBu​​ilder メソッドで「builder.create()」を呼び出すことはできません。こちらの API リファレンスを参照してください

残念ながら、これはダイアログ オブジェクトにアクセスできず、onShowListener を設定できないことを意味します。Preference クラスを拡張して、そこにダイアログを作成してみてください。

于 2013-07-14T10:55:27.910 に答える
-1

適用できるハックがあります (醜いですが動作します)。次のオーバーライドを試してください。

@Override
protected View onCreateDialogView() {
    View view = super.onCreateDialogView();

    view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
        @Override
        public void onViewAttachedToWindow(View view) {
            Button b = d.getButton(DialogInterface.BUTTON_POSITIVE);
            b.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View view) {
                    // TODO Do something

                    // Dismiss once everything is OK.
                    d.dismiss();
                }
            });            }

        @Override
        public void onViewDetachedFromWindow(View view) {

        }
    });

    return view;
}
于 2013-12-28T15:46:11.967 に答える