BadTokenException: 无法添加窗口 -- 已在三星设备上添加了窗口 android.view.ViewRootImpl$W@cb70704

use*_*487 6 android xamarin.android xamarin

我正在使用 Xamarin for Android 并且我在 AlertDialog.Builder.Show() 方法中收到此错误,但它只发生在一些三星(使用 Android 7.0)设备上,我们尝试了一些其他设备,但这个问题没有不会发生。我只是在使用应用程序一段时间后才得到它。堆栈跟踪如下

  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <f32579baafc1404fa37ba3ec1abdc0bd>:0 
  at Java.Interop.JniEnvironment+InstanceMethods.CallObjectMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x00069] in <7802aa64ad574c33adca332a3fa9706a>:0 
  at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualObjectMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x0002a] in <7802aa64ad574c33adca332a3fa9706a>:0 
  at Android.App.AlertDialog+Builder.Show () [0x0000a] in <dc51acef1f304f0dab449a7fc6039799>:0 
  at Prizma.Controls.Common.BindingComboBox.ShowDialog () [0x00062] in C:\TeamProjects\PrizmaProject\Main\MobileSales.iOS\Prizma.Controls.iOS\Common\BindingComboBox.cs:408 
  --- End of managed Android.Views.WindowManagerBadTokenException stack trace ---
android.view.WindowManager$BadTokenException: Unable to add window -- window android.view.ViewRootImpl$W@cb70704 has already been added
    at android.view.ViewRootImpl.setView(ViewRootImpl.java:902)
    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:377)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:97)
    at android.app.Dialog.show(Dialog.java:404)
    at android.app.AlertDialog$Builder.show(AlertDialog.java:1136)
    at mono.android.view.View_OnClickListenerImplementor.n_onClick(Native Method)
    at mono.android.view.View_OnClickListenerImplementor.onClick(View_OnClickListenerImplementor.java:30)
    at android.view.View.performClick(View.java:6261)
    at android.widget.TextView.performClick(TextView.java:11185)
    at android.view.View$PerformClick.run(View.java:23752)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6776)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
Run Code Online (Sandbox Code Playgroud)

我的代码是这样的

            try
            {
                AlertDialog.Builder a = new AlertDialog.Builder(MainActivity);
                a.SetTitle("Select");
                a.SetAdapter(_Adapter, new EventHandler<DialogClickEventArgs>(ClosedDialog));
                a.Create();
                a.Show();
            }
            catch (Exception ex)
            {
                //Exception code
            }
Run Code Online (Sandbox Code Playgroud)

我将 AlertDialog.Builder Show() 方法放在 Try Catch 中,但是在我第一次得到异常之后,我每次都得到它。

一些备注

  • 即使应用程序从未进入后台,我仍然收到此错误。
  • 该应用程序使用最新的 Android SDK (8.1) 编译
  • 我没有最新版本的 Xamarin Android,但现在我有了它,但问题仍然存在。
  • 错误后不仅不显示 AlertDialogs,弹出菜单也不显示。
  • 我有一台装有 Android 6.0.1 的三星 Galaxy J7 Prime,但没有发生此错误,但将其升级到 7.0 后,问题开始了。在摩托罗拉、Hawuei、LG 等其他设备中,即使他们有 Android 7.0,我们也没有这个问题。

请帮助我,我有数周的时间来解决这个问题,而我的拥有三星设备的客户正在杀死我:)

提前致谢。

问候

艾伦

Tol*_*ope 0

在片段中显示您的对话框,如下所示: use if (!IsFinishing) in an activity

if (!((Activity)Context).IsFinishing) 
                {
 try
            {
                AlertDialog.Builder a = new AlertDialog.Builder(MainActivity);
                a.SetTitle("Select");
                a.SetAdapter(_Adapter, new EventHandler<DialogClickEventArgs>(ClosedDialog));
                a.Create();
                a.Show();
            }
            catch (Exception ex)
            {
                //Exception code
            }
}
Run Code Online (Sandbox Code Playgroud)