Steven Evers
Steven Evers

Reputation: 17206

MvvmCross 5.4 Custom Presenter: Method 'MvvmCross.Droid.Views.MvxAndroidViewPresenter..ctor' not found

Here is my setup that registers my presenter:

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

Here is my actual 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;
    }
}

The exception I'm getting is the one in the title. I've tried cleaning, rebuilding, refreshing NuGet packages all to no avail.

I'm a bit frustrated and at a loss. I would appreciate any help.

Upvotes: 0

Views: 570

Answers (1)

Martijn00
Martijn00

Reputation: 3559

The presenter name should be MvxAppCompatViewPresenter. If yours is still MvxFragmentsPresenter it means that one or more packages are outdated. Look at the Playground sample to see a full implementation: https://github.com/MvvmCross/MvvmCross/tree/develop/TestProjects/Playground

Upvotes: 2

Related Questions