最近、Windowsで実行されているXamarinStudioにアップグレードしました。私は、AndroidとさまざまなWindowsフレーバーでうまく動作するmvvmcrossTipCalculatorチュートリアルの簡単な実装を持っています。アップグレードした後、Androidアプリケーションはメインアクティビティ(以下)で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を返す2つのケースがあります。これらのそれぞれで、Activator.CreateInstance()の呼び出しに置き換えました。
元の実装の背後にある理論的根拠が何であるかはわかりません。何かを壊したのではないかと少し心配しています。このメソッドがnullを返す場合がある理由と、mvvmcrossの基本的な何かを壊したかどうかについて、誰かが光を当てることができますか?