我有以下问题。
我尝试从简单的助手类
调用警告对话框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.
注意:错误不是由插件引起的。
我该如何解决?
非常感谢您的任何建议。
答案 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);
}
}
);
}
并像你的情况一样使用它,但你必须知道,如果你传递错误的上下文(或根本不这样做)可能会出现错误的窗口令牌异常。