【问题标题】:MvvmCross 5.4 Custom Presenter: Method 'MvvmCross.Droid.Views.MvxAndroidViewPresenter..ctor' not foundMvvmCross 5.4 自定义演示者:找不到方法“MvvmCross.Droid.Views.MvxAndroidViewPresenter..ctor”
【发布时间】:2017-11-17 00:48:06
【问题描述】:
  • 我见过this,但解决方案不起作用。
  • 在撰写本文时,我已更新到最新的 MvvmCross(实际上是最新的)5.4.2。

这是我的演示者注册设置:

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;
    }
}

这是我的实际演示者:

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;
    }
}

我得到的例外是标题中的那个。我试过清理、重建、刷新 NuGet 包都无济于事。

我有点沮丧和不知所措。我将不胜感激。

【问题讨论】:

  • 你确定你更新/删除了所有旧的 android MvvmCross 的依赖项吗?我在 MvvmCross 的主存储库中的任何地方都找不到MvxFragmentsPresentermvvmcross.com/documentation/upgrading/…

标签: xamarin xamarin.android mvvmcross


【解决方案1】:

演示者姓名应为MvxAppCompatViewPresenter。如果您的仍然是MvxFragmentsPresenter,则意味着一个或多个包已过时。查看 Playground 示例以查看完整实现:​​https://github.com/MvvmCross/MvvmCross/tree/develop/TestProjects/Playground

【讨论】:

  • 一定是包缓存问题还是什么?我检查了 VS 中的所有包,以及磁盘上包文件夹中的所有包,它们都是最新的(之前的包是 5.1.1)。最终手动从磁盘中删除它们并运行包还原,它现在正在工作。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多