在Android

时间:2016-10-24 12:17:59

标签: android xamarin mvvmcross

基于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项目中初始化?

  

更新:解决方法的最终解决方案如下:

     
      
  1. 在PCL项目App.cs中添加:Mvx.RegisterSingleton(()=>   UserDialogs.Instance);
  2.   
  3. 在OnCreate中首次加载的活动中       add:UserDialogs.Init(()=> this);
  4.   

1 个答案:

答案 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)

GitHub docs.