setOnShowListener()在DialogPreference中不起作用

时间:2013-07-14 09:11:25

标签: android dialog alertdialog android-alertdialog android-dialogfragment

我正在课堂上实施DialogPreference。我希望当单击对话框的正面按钮时,对话框不应该被忽略。我正在使用this answer.

中的逻辑

在我使用的课程内:

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,对话框关闭了。那么我对that answer的实施有何错误?

2 个答案:

答案 0 :(得分:0)

你的情况有点不同。你不能调用" builder.create()"在onPrepareDialogBu​​ilder方法中。请参阅API参考here

不幸的是,这意味着您无法访问对话框对象,并且无法设置onShowListener。尝试扩展Preference类并在那里构建对话框。

答案 1 :(得分:-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;
}