Xamarin Forms - Как получить Android.Support.V4.App.Fragment Manager из View Renderer в проекте Android? - PullRequest
0 голосов
/ 16 апреля 2019

Xamarin Forms - я создал одну адаптивную карту для рендеринга в своем проекте Android.Чтобы вызвать функцию рендеринга адаптивной карты, мне нужно перейти в Fragment Manager.Как я могу получить менеджер фрагментов из View Renderer?

В проекте Xamarin.Android я могу получить доступ к менеджеру фрагментов из класса фрагментов.Но Xamarin.Forms я понятия не имею, как это сделать.

[assembly: ExportRenderer(typeof(BaseTemplate.CustomViews.AdaptiveCardLayout), typeof(BaseTemplate.Droid.Renderers.DroidAdaptiveCardLayoutRenderer))]

namespace BaseTemplate.Droid.Renderers
{
    public class DroidAdaptiveCardLayoutRenderer : ViewRenderer<AdaptiveCardLayout, Android.Views.View>, ICardActionHandler
    {
        public DroidAdaptiveCardLayoutRenderer(Context context) : base(context)
        {
        }

        public void OnAction(BaseActionElement p0, RenderedAdaptiveCard p1)
        {
            throw new NotImplementedException();
        }

        public void OnMediaPlay(BaseCardElement p0, RenderedAdaptiveCard p1)
        {
            throw new NotImplementedException();
        }

        public void OnMediaStop(BaseCardElement p0, RenderedAdaptiveCard p1)
        {
            throw new NotImplementedException();
        }

        protected override void OnElementChanged(ElementChangedEventArgs<AdaptiveCardLayout> e)
        {
            CardRendererImplementation cardRenderer = new CardRendererImplementation();
            ICardActionHandler cardActionHandler;
            Context context = Android.App.Application.Context;
            cardRenderer.Context = context;

            //how to get fragment manager here?
        }
    }
}

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Это довольно легко на самом деле!

Вы должны использовать CurrentActivity настройка плагина здесь

Как только вы закончите с этим, используйте свойство Activity

var appcompatActivity= CrossCurrentActivity.Current.Activity as AppCompatActivity;
var mFragManager= appcompatActivity.SupportFragmentManager;
1 голос
/ 16 апреля 2019

Вы можете использовать Контекст для приведения в действие.Так как ваш DroidAdaptiveCardLayoutRenderer имеет конструктор по умолчанию с context в качестве параметра.

Попробуйте этот код:

var activity = Context as Activity;
activity.FragmentManager.BeginTransaction().Replace(Resource.Id.container, BasicFragment.NewInstance()).Commit();

Для V4 использовать:

using Android.Support.V7.App;

activity = Context as AppCompatActivity;
activity.SupportFragmentManager.BeginTransaction().Replace(Resource.Id.container, BasicFragment.NewInstance()).Commit();
...