2017-11-17 1 views
0
  • 나는 this을 보았으며 해결책이 작동하지 않습니다.
  • 필자는이 글을 쓸 당시 최신 MvvmCross (실제로는 최신의 모든 것)를 5.4.2로 업데이트했습니다.

    MvvmCross 5.4 사용자 정의 프리젠터 : 메서드 'MvvmCross.Droid.Views.MvxAndroidViewPresenter..ctor'를 찾을 수 없음

    public class MyAndroidPresenter : MvxFragmentsPresenter 
    { 
        public MyAndroidPresenter(IEnumerable<Assembly> AndroidViewAssemblies) 
         : base(AndroidViewAssemblies) // EXCEPTION HERE 
        { 
        } 
    
        protected override void ShowFragment(MvxViewModelRequest request) 
        { 
         if (GoHomeHandled(request)) 
          return; 
    
         if (ShowModalHandled(request)) 
          return; 
    
         base.ShowFragment(request); 
        } 
    
        protected override void ShowActivity(MvxViewModelRequest request, MvxViewModelRequest fragmentRequest = null) 
        { 
         if (GoHomeHandled(request)) 
          return; 
    
         if (ShowModalHandled(request)) 
          return; 
    
    
         base.ShowActivity(request, fragmentRequest); 
        } 
    
        private bool ShowModalHandled(MvxViewModelRequest request) 
        { 
         if (request.PresentationValues == null) 
          return false; 
    
         var viewsContainer = Mvx.Resolve<IMvxViewsContainer>(); 
         var viewType = viewsContainer.GetViewType(request.ViewModelType); 
         var intent = new Intent(Application.Context, viewType); 
    
         if (request.PresentationValues.ContainsKey(Utilities.Constants.Navigation.ShowModal)) 
         { 
          intent.AddFlags(ActivityFlags.NewTask | ActivityFlags.ClearTask); 
    
          Application.Context.StartActivity(intent); 
          return true; 
         } 
         else if (request.PresentationValues.ContainsKey(Utilities.Constants.Navigation.StayModal)) 
         { 
          Application.Context.StartActivity(intent); 
          return true; 
         } 
         else 
         { 
          return false; 
         } 
        } 
    
        private bool GoHomeHandled(MvxViewModelRequest request) 
        { 
         if (request.PresentationValues == null) 
          return false; 
    
         if (request.PresentationValues.ContainsKey(Utilities.Constants.Navigation.ReturnHome)) 
         { 
          var intent = new Intent(Application.Context, typeof(MainActivity)); 
          intent.AddFlags(ActivityFlags.NewTask | ActivityFlags.ClearTask | ActivityFlags.TaskOnHome); 
    
          Application.Context.StartActivity(intent); 
    
          return true; 
         } 
    
         return false; 
        } 
    } 
    

    내가 갖는 예외는 제목의 하나입니다

    public class Setup : MvxAppCompatSetup 
    { 
        public Setup(Context applicationContext) 
         : base(applicationContext) 
        { 
        } 
    
        protected override IEnumerable<Assembly> AndroidViewAssemblies => new List<Assembly>(base.AndroidViewAssemblies) 
        { 
         typeof(global::Android.Support.V7.Widget.Toolbar).Assembly 
        }; 
    
        protected override IMvxApplication CreateApp() 
        { 
         Mvx.RegisterSingleton<INetworkManager>(() => new NetworkManagerAndroid(this.ApplicationContext)); 
    
         return new App(); 
        } 
    
        protected override void InitializeLastChance() 
        { 
         base.InitializeLastChance(); 
         Mvx.RegisterSingleton<IAnalyticsService>(() => GoogleAnalyticsService.GetInstance()); 
        } 
    
        protected override IMvxAndroidViewPresenter CreateViewPresenter() 
        { 
         var presenter = new MyAndroidPresenter(AndroidViewAssemblies); 
         Mvx.RegisterSingleton<IMvxAndroidViewPresenter>(presenter); 
    
         return presenter; 
        } 
    } 
    

    여기 내 실제 발표자 :

은 여기 내 발표자를 등록 내 설정입니다. 청소, 재건, NuGet 패키지를 새로 고치려 고 노력했습니다.

저는 조금 좌절감을 느낍니다. 나는 어떤 도움을 주셔서 감사합니다.

+0

MvvmCross의 모든 기존 안드로이드를 업데이트/제거 했습니까? MvvmCross의 메인 저장소에서 'MvxFragmentsPresenter'를 찾을 수 없습니다. https://www.mvvmcross.com/documentation/upgrading/upgrade-to-mvvmcross-50?scroll=1300 – Pilatus

답변

2

발표자 이름은 MvxAppCompatViewPresenter이어야합니다. 너의 것이 아직도 MvxFragmentsPresenter 인 경우 하나 이상의 패키지가 구식임을 의미합니다. 놀이터 샘플을보고 전체 구현을 확인하십시오 : https://github.com/MvvmCross/MvvmCross/tree/develop/TestProjects/Playground

+0

패키지 캐시에 문제가 있습니까? 나는 VS의 모든 패키지와 패키지 폴더의 디스크를 검사했으며, 모두 최신 패키지였습니다 (이전 패키지는 5.1.1이었습니다). 수동으로 디스크에서 모두 삭제하고 패키지 복원을 실행하는 것으로 끝났습니다. 이제 작동합니다. 감사! –

관련 문제