2017-01-23 6 views
0

既存のXamarin.Androidアプリをmvvmcross 3.5からmvvmcross 4.4.0にアップグレードしようとしています。私はthis documentationを辿り、アプリは今スプラッシュスクリーンを表示してビルドし起動しますが、スプラッシュスクリーンを越えてナビゲートしません。 ShowViewModel<MainViewModel>()に電話すると何も起こりません。私が最後に見たアプリケーションの出力は以下の通りです。私は現在、次にどこを見るか分からない。誰もがアイデアを持っていますか?mvx:警告:例外がマスクされていますArgumentException:同じキーを持つ項目が既に追加されています

mvx:Warning: 17,87 Exception masked ArgumentException: An item with the same key has already been added. 
     at System.ThrowHelper.ThrowArgumentException (System.ExceptionResource resource) [0x0000b] in <5d9d5f6570654147b240b9398d8953cc>:0 
    at System.Collections.Generic.Dictionary`2[TKey,TValue].Insert (TKey key, TValue value, System.Boolean add) [0x0008e] in <5d9d5f6570654147b240b9398d8953cc>:0 
    at System.Collections.Generic.Dictionary`2[TKey,TValue].Add (TKey key, TValue value) [0x00000] in <5d9d5f6570654147b240b9398d8953cc>:0 
    at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement] (System.Collections.Generic.IEnumerable`1[T] source, System.Func`2[T,TResult] keySelector, System.Func`2[T,TResult] elementSelector, System.Collections.Generic.IEqualityComparer`1[T] comparer) [0x0005c] in <1a5e8b31a0e44a97a3b8f85920b2d059>:0 
    at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement] (System.Collections.Generic.IEnumerable`1[T] source, System.Func`2[T,TResult] keySelector, System.Func`2[T,TResult] elementSelector) [0x00000] in <1a5e8b31a0e44a97a3b8f85920b2d059>:0 
    at MvvmCross.Droid.Shared.Presenter.FragmentHostRegistrationSettings.InitializeIfNeeded() [0x00128] in <90641336d9534da69c6ac9e0919ad635>:0 
    at MvvmCross.Droid.Shared.Presenter.FragmentHostRegistrationSettings.IsTypeRegisteredAsFragment (System.Type viewModelType) [0x00000] in <90641336d9534da69c6ac9e0919ad635>:0 
    at MvvmCross.Droid.Shared.Presenter.MvxFragmentsPresenter.Show (MvvmCross.Core.ViewModels.MvxViewModelRequest request) [0x0000c] in <90641336d9534da69c6ac9e0919ad635>:0 
    at MvvmCross.Droid.Views.MvxAndroidViewDispatcher+<>c__DisplayClass2_0.<ShowViewModel>b__0() [0x00000] in <f6aebf863dc84be7b380cfec8d459508>:0 
    at MvvmCross.Droid.Views.MvxAndroidMainThreadDispatcher.RequestMainThreadAction (System.Action action) [0x00019] in <f6aebf863dc84be7b380cfec8d459508>:0 
    at MvvmCross.Droid.Views.MvxAndroidViewDispatcher.ShowViewModel (MvvmCross.Core.ViewModels.MvxViewModelRequest request) [0x00014] in <f6aebf863dc84be7b380cfec8d459508>:0 
    at MvvmCross.Core.ViewModels.MvxNavigatingObject.ShowViewModelImpl (System.Type viewModelType, MvvmCross.Core.ViewModels.IMvxBundle parameterBundle, MvvmCross.Core.ViewModels.IMvxBundle presentationBundle, MvvmCross.Core.ViewModels.MvxRequestedBy requestedBy) [0x0002e] in <69bce0378e8e413982d3b552d7e387a8>:0 
    at MvvmCross.Core.ViewModels.MvxNavigatingObject.ShowViewModel (System.Type viewModelType, MvvmCross.Core.ViewModels.IMvxBundle parameterBundle, MvvmCross.Core.ViewModels.IMvxBundle presentationBundle, MvvmCross.Core.ViewModels.MvxRequestedBy requestedBy) [0x00000] in <69bce0378e8e413982d3b552d7e387a8>:0 
    at MvvmCross.Core.ViewModels.MvxNavigatingObject.ShowViewModel[TViewModel] (MvvmCross.Core.ViewModels.IMvxBundle parameterBundle, MvvmCross.Core.ViewModels.IMvxBundle presentationBundle, MvvmCross.Core.ViewModels.MvxRequestedBy requestedBy) [0x00000] in <69bce0378e8e413982d3b552d7e387a8>:0 
    at MvvmCross.Core.ViewModels.MvxAppStart`1[TViewModel].Start (System.Object hint) [0x00013] in <69bce0378e8e413982d3b552d7e387a8>:0 
    at MvvmCross.Droid.Views.MvxSplashScreenActivity.TriggerFirstNavigate() [0x00005] in <f6aebf863dc84be7b380cfec8d459508>:0 
    at MvvmCross.Droid.Views.MvxSplashScreenActivity.InitializationComplete() [0x00009] in <f6aebf863dc84be7b380cfec8d459508>:0 
    at MvvmCross.Droid.Platform.MvxAndroidSetupSingleton.<InitializeFromSplashScreen>b__7_1() [0x0000a] in <f6aebf863dc84be7b380cfec8d459508>:0 
    at MvvmCross.Platform.Core.MvxMainThreadDispatcher.ExceptionMaskedAction (System.Action action) [0x00000] in D:\git\MvvmCross\MvvmCross\Platform\Platform\Core\MvxMainThreadDispatcher.cs:22 
+0

これを再生するための手順を教えてください。スタックトレースは記号化されていないので、どのラインが失敗するかしか推測できません。 – Cheesebaron

+0

私は最終的に原因を見つけたと思う:アプリケーションは、このようなsetup.csのコードを使用する:assemblies.Add(typeof(Android.Support.V4.Widget.DrawerLayout).Assembly);このコードを削除すると、ナビゲーションが再び機能するように見えます。しかし、私はまだこれをタイプしながら調査中です。 – Niels

+0

私は同じ問題を抱えているので、これを引き起こしている原因を見つけましたか?解決策や原因を投稿することができれば、大きな助けになるでしょう。ありがとうNiels。ありがとうございます。 – rideintothesun

答えて

2

問題がMvvmCross 4にアップグレードする前に、我々はSetup.csprotected override IMvxAndroidViewPresenter CreateViewPresenter()の私たち自身の実装を持っていたということでした。アップグレードした後、我々は(標準)の実装にこの実装を変更:

protected override IMvxAndroidViewPresenter CreateViewPresenter() 
    { 
     var mvxFragmentsPresenter = new MvxFragmentsPresenter(AndroidViewAssemblies); 
     Mvx.RegisterSingleton<IMvxAndroidViewPresenter>(mvxFragmentsPresenter); 
     return mvxFragmentsPresenter; 
    } 

標準実装では、私たちのprotected override IList<Assembly> AndroidViewAssemblies実装でWELを動作しませんでした。

ソリューション:

protected override IList<Assembly> AndroidViewAssemblies { ... }assemblies.Add (typeof(...).Assembly);を削除する私たちの問題を解決しました。

+0

。私はカスタムプレゼンターと同じ状況を抱えていました。私は同じことをしましたが、問題を解決しましたが、なぜこれがどうなるかは不明です。 – rideintothesun

+0

同じですが、私が考えることができるのは、アセンブリが自動的に追加されるということだけです。そのため、「同じキーを持つアイテムが既に追加されています」というメッセージが表示されます。 – Niels

関連する問題