我最近升级到在 Windows 上运行的 Xamarin Studio。我有一个简单的 mvvmcross TipCalculator 教程实现,它在 Android 和各种 Windows 版本上运行良好。升级后,Android 应用程序开始在 Main 活动中抛出 NullReferenceExceptions(如下):
[Activity(Label = "TipCalculator.Android", MainLauncher = true, Icon = "@drawable/icon")]
public class TipCalculatorActivity : MvxBindingActivityView<TipCalculatorViewModel>
{
protected override void OnViewModelSet()
{
SetContentView(Resource.Layout.TipView);//Throws NullReferenceException
}
}
在对 mvvmcross 代码做了一些挖掘之后,我在 MvxAndroidViewsContainer 类中找到了这个方法:
public virtual IMvxViewModel Load(Intent intent, Type viewModelTypeHint)
{
if (intent == null)
{
// TODO - some trace here would be nice...
return Activator.CreateInstance(viewModelTypeHint) as IMvxViewModel;
//return null;
}
if (intent.Action == Intent.ActionMain)
{
// TODO - some trace here would be nice...
return Activator.CreateInstance(viewModelTypeHint) as IMvxViewModel;
}
if (intent.Extras == null)
{
// TODO - some trace here would be nice...
return Activator.CreateInstance(viewModelTypeHint) as IMvxViewModel;
//return null;
}
IMvxViewModel mvxViewModel;
if (TryGetEmbeddedViewModel(intent, out mvxViewModel))
return mvxViewModel;
return CreateViewModelFromIntent(intent);
}
在原始代码中,有两种情况会返回 null。在其中的每一个中,我都将其替换为对 Activator.CreateInstance() 的调用。
我不确定原始实现背后的基本原理是什么,我有点担心我破坏了一些东西。任何人都可以解释为什么这种方法会返回 null 以及我是否破坏了 mvvmcross 中的一些基本内容?