Android:从帮助程序类调用任何可见活动的“警报”对话框?

时间:2015-12-14 11:53:01

标签: android alert

我有以下问题。

我尝试从简单的助手类

调用警告对话框
public class NotificationHelper

因为代码没有在活动上执行,但是在接收推送通知之后并且活动正在前台运行。

所以我试着这样做:

// Show dialog
                    Handler handler = new Handler(Looper.getMainLooper());
                    final String finalNotificationHeading = notificationHeading;
                    final String finalNotificationBody = notificationBody;

                    handler.post(
                            new Runnable() {
                                @Override
                                public void run() {
                                    DialogHelper.showSimpleAlert(finalNotificationHeading, finalNotificationBody, ctx.getString(R.string.positive_button_text),
                                            ctx.getString(R.string.negative_button_text), null, ctx, notificationAlertCallback);
                                }
                            }
                    );

但我总是收到以下错误:

com.afollestad.materialdialogs.MaterialDialog$DialogException: Bad window token, you cannot show a dialog before an Activity is created or after it's hidden.

注意:错误不是由插件引起的。

我该如何解决?

非常感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

你的问题是ctx。你传递它的那一刻。

应该在您想要创建对话框时给出,它应该是当前的UI(活动,片段等)

sudo service postfix restart

表示您尝试添加对话框的上下文当前不在屏幕上。

所以你的方法看起来像

Bad window token

如果你不想在调用showDialog时一直传递currentActivity,你应该将你的currentContext传递给你想在其中使用它的每个Activity的onResume

NotificationHelper{
void showDialog(Activity currentActivity){
          Handler handler = new Handler(Looper.getMainLooper());
                    final String finalNotificationHeading = notificationHeading;
                    final String finalNotificationBody = notificationBody;

                    handler.post(
                            new Runnable() {
                                @Override
                                public void run() {
                                    DialogHelper.showSimpleAlert(finalNotificationHeading, finalNotificationBody, currentActivity.getString(R.string.positive_button_text),
                                            currentActivity.getString(R.string.negative_button_text), null, currentActivity, notificationAlertCallback);
                                }
                            }
                    );

}

并像你的情况一样使用它,但你必须知道,如果你传递错误的上下文(或根本不这样做)可能会出现错误的窗口令牌异常。