Xamarin Forms - 如何从 Android 项目中的视图渲染器获取 Android.Support.V4.App.Fragment 管理器?
Xamarin Forms - How to get Android.Support.V4.App.Fragment Manager from View Renderer in Android project?
Xamarin Forms - 我在我的 android 项目中创建了一个自适应卡片自定义渲染器。为了调用自适应卡片渲染器功能,我需要传入片段管理器。如何从 View Renderer 获取片段管理器?
在Xamarin.Android项目中,我可以从片段class访问片段管理器。但是 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?
}
}
}
您可以使用 Context 转换为 activity。由于您的 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();
其实很简单!
你应该使用 CurrentActivity plugin setup here
完成此操作后,使用 Activity 属性
var appcompatActivity= CrossCurrentActivity.Current.Activity as AppCompatActivity;
var mFragManager= appcompatActivity.SupportFragmentManager;
Xamarin Forms - 我在我的 android 项目中创建了一个自适应卡片自定义渲染器。为了调用自适应卡片渲染器功能,我需要传入片段管理器。如何从 View Renderer 获取片段管理器?
在Xamarin.Android项目中,我可以从片段class访问片段管理器。但是 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?
}
}
}
您可以使用 Context 转换为 activity。由于您的 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();
其实很简单!
你应该使用 CurrentActivity plugin setup here
完成此操作后,使用 Activity 属性
var appcompatActivity= CrossCurrentActivity.Current.Activity as AppCompatActivity;
var mFragManager= appcompatActivity.SupportFragmentManager;