0

我正在DialogPreference课堂上实现一​​个。我希望当单击对话框的正按钮时,对话框不应关闭。我正在使用这个答案中的逻辑。

在我使用的类里面:

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 回答