错误的窗口标记,在创build活动或隐藏之后无法显示对话框

我在我的应用程序中使用AppIntro库 。

它有3张幻灯片。 当第三张幻灯片显示时,我想问用户的东西。 为了达到这个目标,我使用了afollestad的材质对话框

我在AppIntro活动中的代码如下所示:

@Override public void onNextPressed() { if(this.pager.getCurrentItem() == 2) { MaterialDialog dialog = new MaterialDialog.Builder(getApplicationContext()) .title("QR Code scannen") .content("Möchtest du den QR Code scannen oder selbst eingeben?") .positiveText("eingeben") .negativeText("scannen") .onPositive(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { Intent intent = new Intent(getApplicationContext(), RegistrationActivity.class); startActivity(intent); } }) .onNegative(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { // TODO } }) .show(); } } 

运行应用程序当我滑动到第三张幻灯片时,出现以下问题:

 com.afollestad.materialdialogs.MaterialDialog$DialogException: Bad window token, you cannot show a dialog before an Activity is created or after it's hidden. at com.afollestad.materialdialogs.MaterialDialog.show(MaterialDialog.java:1328) at com.afollestad.materialdialogs.MaterialDialog$Builder.show(MaterialDialog.java:1317) at com.ads.adstimer.fragment.Registration.RegistrationActivity.onNextPressed(RegistrationActivity.java:64) at com.github.paolorotolo.appintro.AppIntro$2.onClick(AppIntro.java:118) at android.view.View.performClick(View.java:5204) at android.view.View$PerformClick.run(View.java:21153) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

我真的不明白这个问题。 由于AppIntro活动已经加载,我希望它显示一个特定的片段时显示一个对话框。

如何显示特定幻灯片时显示对话框?

Solutions Collecting From Web of "错误的窗口标记,在创build活动或隐藏之后无法显示对话框"

 MaterialDialog dialog = new MaterialDialog.Builder(getApplicationContext()) 

我想你需要在这里传递Activity实例,而不是应用程序上下文。

使用

  MaterialDialog dialog = new MaterialDialog.Builder(YourActivityName.class) 

不要使用getApplicationContext()。

如果在活动内部发生这种错误,则使用“this”而不是“getApplicationContext()”。

  mProgress = new MaterialDialog.Builder(this) 

这可以通过确认当前Activity hasWindowFocus来解决,因为当你在片段中获取上下文时,而不是确切的是哪个Activity,它可能没有windowFocus

 if (((Activity) mContext).hasWindowFocus()) { mDialog.show(); }