2017-10-18 65 views
2

我創建設置:system.missingMethodException而:方法MvvmCross.Droid.Views.MvxAndroidViewPresenter..ctor'未找到

public class Setup : MvxAndroidSetup 
{ 
    public Setup(Context applicationContext) 
     : base(applicationContext) 
    { 
    } 

    protected override IMvxApplication CreateApp() 
    { 
     return new App(); 
    } 

    protected override IEnumerable<Assembly> AndroidViewAssemblies => 
    new List<Assembly>(base.AndroidViewAssemblies) 
    { 
     typeof(Android.Support.Design.Widget.NavigationView).Assembly, 
     typeof(Android.Support.Design.Widget.FloatingActionButton).Assembly, 
     typeof(Android.Support.V7.Widget.Toolbar).Assembly, 
     typeof(Android.Support.V4.Widget.DrawerLayout).Assembly, 
     typeof(Android.Support.V4.View.ViewPager).Assembly, 
     typeof(MvvmCross.Droid.Support.V7.RecyclerView.MvxRecyclerView).Assembly 
    }; 

    /// <summary> 
    /// This is very important to override. The default view presenter does not know how to show fragments! 
    /// </summary> 
    protected override IMvxAndroidViewPresenter CreateViewPresenter() 
    { 
     var mvxFragmentsPresenter = new MvxFragmentsPresenter(AndroidViewAssemblies); 
     Mvx.RegisterSingleton<IMvxAndroidViewPresenter>(mvxFragmentsPresenter); 
     return mvxFragmentsPresenter; 
    } 
} 

我使用mvvmscross版本5.2.1 MvxAndroidSetup我在行代碼變種mvxFragmentsPresenter問題=新的MvxFragmentsPresenter(AndroidViewAssemblies);.在Mac上運行項目 的Visual Studio 2017年時通知:

System.MissingMethodException: Method 'MvvmCross.Droid.Views.MvxAndroidViewPresenter..ctor' not found. 
    at VietOrder.Droid.Setup.CreateViewPresenter() [0x00001] in /Volumes/Data/Dev/VietOrder/Xamarin/VietOrder/VietOrder.Droid/Setup.cs:46 
    at MvvmCross.Droid.Platform.MvxAndroidSetup.CreateViewDispatcher() [0x00000] in C:\projects\mvvmcross\MvvmCross\Droid\Droid\Platform\MvxAndroidSetup.cs:124 
    at MvvmCross.Core.Platform.MvxSetup.InitializeViewDispatcher() [0x00000] in C:\projects\mvvmcross\MvvmCross\Core\Core\Platform\MvxSetup.cs:260 
    at MvvmCross.Core.Platform.MvxSetup.InitializeSecondary() [0x000f8] in C:\projects\mvvmcross\MvvmCross\Core\Core\Platform\MvxSetup.cs:91 
    at MvvmCross.Droid.Platform.MvxAndroidSetupSingleton.<InitializeFromSplashScreen>b__7_0 (System.Object ignored) [0x00000] in C:\projects\mvvmcross\MvvmCross\Droid\Droid\Platform\MvxAndroidSetupSingleton.cs:92 
    at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context (System.Object state) [0x00007] in <896ad1d315ca4ba7b117efb8dacaedcf>:0 
    at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00071] in <896ad1d315ca4ba7b117efb8dacaedcf>:0 
    at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <896ad1d315ca4ba7b117efb8dacaedcf>:0 
    at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() [0x00021] in <896ad1d315ca4ba7b117efb8dacaedcf>:0 
    at System.Threading.ThreadPoolWorkQueue.Dispatch() [0x00074] in <896ad1d315ca4ba7b117efb8dacaedcf>:0 
    at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() [0x00000] in <896ad1d315ca4ba7b117efb8dacaedcf>:0 

謝謝!

+0

請發佈您的'MvxFragmentsPresenter'代碼。 –

+0

同樣的問題。我敢打賭,它與5.2版博客中描述的Android Presenter更改有關:https://www.mvvmcross.com/mvvmcross-52-release/。深入瞭解問題可能是什麼。順便說一句,在Win 7/10上運行VS2015。 – Igor

回答

0

我想我已經解決了它,但它已經在漫長的旅途中從4.4.0版升級到最新的MvvmCross版本(5.3.1)。我將確定完成升級所需的步驟。應該指出的是,在此之前,我已將所有Xamarin和其他軟件包更新到最新,最好,並確保項目編譯和運行。此外,我將Xamarin本身更新爲4.7.10.22,這爲Android 8.0帶來了支持(我還沒有iOS前端)。在這裏,我所經歷的步驟來更新到5.3.1 MvvmCross:

  • 升級所有MvvmCross包5.3.1
  • 刪除MvvmCross.Droid.Shared(4.4.0)
  • 添加MvvmCross.Droid。 Support.Core.UI(5.3.1)
  • 添加MvvmCross.Droid.Support.Core.Utils(5.3.1)
  • 添加MvvmCross.Droid.Support.Fragment(5.3.1)

現在回答你的問題,我將我的安裝程序類從MvxAppCompatSetup更改爲子類。打電話到MvxAppCompatSetup變爲一個簡單的創建一個新的MvxAppCompatViewPresenter(的)(見下文),加上去除MvvmCross.Droid.Shared.Presenter的進口:

protected override IMvxAndroidViewPresenter CreateViewPresenter() 
{    
    return new MvxAppCompatViewPresenter(AndroidViewAssemblies); 
} 

此外,由於我使用的一些片段,我需要將它們上的屬性從MvxFragment更改爲MvxFragmentPresentation。最後更改是將我的主要活動從子分類MvxCachingFragmentCompatActivity更改爲子分類MvxAppCompatActivity。所有這一切都爲我做了伎倆,希望能幫助你。

P.S.我仍然必須更改導航以符合新的NavigationService。

+0

感謝@igor 我解決了它通過降級MvvmCross版本從5.3.1到5.1.1,因爲MvvmCross.Droid.Share當前版本5.1.1 –

+0

是的,這將工作,但最終你可能會面臨必須採用新的Android主持人模式和上述步驟將有所幫助。祝你好運。 – Igor

+0

@VermoricHuynh你應該能夠強制刪除MvvmCross.Droid.Shared(它的代碼被捲入現有的包IIRC),然後更新你的其他包,它應該工作。 –

相關問題