我正在使用 MvvmCross 创建我的 Android 应用程序,但遇到了以下问题:
当我试图显示在 ViewModel 中创建的 AlertDialog 时,
出现“未处理的异常:Android.Views.WindowManagerBadTokenException ”。
public class MyViewModel : MvxViewModel
{
public ICommand ShowAlertCommand { get; private set; }
public AuthorizationViewModel()
{
ShowAlertCommand = new MvxCommand(() =>
{
var adb = new AlertDialog.Builder(Application.Context);
adb.SetTitle("Title here");
adb.SetMessage("Message here");
adb.SetIcon(Resource.Drawable.Icon);
adb.SetPositiveButton("OK", (sender, args) => { /* some logic */});
adb.SetNegativeButton("Cancel", (sender, args) => { /* close alertDialog */});
adb.Create().Show();
});
}
}
当我研究时,我发现它发生是因为对上下文的引用而不是在 AlertDialog.Builder 中的 Activity 上。
在本主题中,我发现了以下决定:通过使用 GetService() 接收对当前 Activity 的引用,但我没有找到用于 IMvxServiceConsumer、IMvxAndroidCurrentTopActivity 接口的 mvvmcross 插件。
我的问题是我可以从 ViewModel 显示 AlertDialog 吗?以及如何获得对 Activity 的引用,而不是对 Application.Context 的引用?关闭用户将留在当前视图上的 AlertDialog 的正确方法是什么?