基于MVVMCross,我在Android应用程序中使用了插件Acr.UserDialogs。 在PCL项目中,我在viewmodel构造函数注入中使用了IUserDialog。
我已经在PCL和Droid项目中安装了Acr.UserDialogs包,但是当我运行app时,它会抛出:
在android中,你必须从第一个调用UserDialogs.Init(Activity) 自定义应用程序OR中的活动或UserDialogs.Init(App) 提供工厂功能以获得当前的顶级活动 UserDialogs.Init(()=>提供顶级活动)
我试着在我的viewModel中调用:
UserDialogs.Init(this);
但是Init不被认可 并调用UserDialogs.Instance.Loading()。Hide();在应用程序中引发同样的问题。
如何在android项目中初始化?
更新:解决方法的最终解决方案如下:
- 在PCL项目App.cs中添加:Mvx.RegisterSingleton(()=> UserDialogs.Instance);
- 在OnCreate中首次加载的活动中 add:UserDialogs.Init(()=> this);
醇>
答案 0 :(得分:4)
这个错误非常清楚。您无法在viewModel中初始化它,您只能在主活动中执行此操作。
常见问题
使用加载时我得到nullreferenceexception。
当您从中运行加载(或几乎任何对话框)时会发生这种情况 您的页面或viewmodel的构造函数。视图尚未呈现 然而,没有什么可以呈现的。
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)