在 Android 中使用 UserDialogs

Fra*_*ent 5 android mvvmcross xamarin

我坚持使用基于 MVMCross 的 android 应用程序中的插件 Acr.UserDialogs。在 PCL 项目中,我在视图模型构造函数注入中使用了 IUserDialog。

我在 PCL 和 Droid 项目中都安装了 Acr.UserDialogs 包,但是当我运行应用程序时,它抛出:

在android中,您必须从您的第一个活动调用 UserDialogs.Init(Activity) 或从您的自定义应用程序调用 UserDialogs.Init(App) 或提供工厂函数以通过 UserDialogs.Init(() => supply top activity 获取当前的顶级活动)

我试图在我的 viewModel 中调用:

UserDialogs.Init(this);
Run Code Online (Sandbox Code Playgroud)

但是 Init 不被识别和调用 UserDialogs.Instance.Loading().Hide(); 在应用程序中引发了同样的问题。

它应该如何在android项目中初始化?

更新:解决此问题的最终解决方案如下所示:

  1. 在 PCL 项目 App.cs 中添加: Mvx.RegisterSingleton(() => UserDialogs.Instance);
  2. 在 OnCreate 的第一个加载的活动中添加: UserDialogs.Init(() => this);

M. *_*cki 9

这个错误非常明显。你不能在 viewModel 中初始化它,你只能在你的主要活动中做到这一点。

常问问题

使用加载时出现 nullreferenceexception。

当您从页面或视图模型的构造函数运行加载(或几乎任何对话框)时,就会发生这种情况。视图还没有被渲染,因此没有什么可渲染的。

Android 初始化在您的MainActivity 中

UserDialogs.Init(this);
OR UserDialogs.Init(() => provide your own top level activity provider)
OR MvvmCross - UserDialogs.Init(() => Mvx.Resolve<IMvxTopActivity>().Activity)
OR Xamarin.Forms - UserDialogs.Init(() => (Activity)Forms.Context)
Run Code Online (Sandbox Code Playgroud)

GitHub 文档。