Xamarin形成自定义渲染器android stackoverflower

时间:2015-12-16 20:55:51

标签: android android-activity xamarin renderer

我试图创建一个简单的Android原生视图。一旦我得到了整个事情。使用渲染器工作 - 它将被实现为摄像机视图。

我的渲染器:

    [assembly: ExportRenderer(typeof(CameraPage), typeof(CameraPageRenderer))]
namespace CameraTester2.Droid
{
     public class CameraPageRenderer : PageRenderer, TextureView.ISurfaceTextureListener
    {
        Activity activity;
        global::Android.Views.View view;
        protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
        {
            base.OnElementChanged(e);
            activity = this.Context as Activity;
            view =activity.LayoutInflater.Inflate(Resource.Layout.TestLayout, this, true);
            AddView(view);
        }

然而..当我添加视图时 - 我得到一个stackoverflow execption,我只是无法弄清楚为什么我在做什么是错误的。

我尝试过以下示例: https://blog.xamarin.com/customize-your-xamarin-forms-app-with-pages-for-each-platform/

http://developer.xamarin.com/guides/cross-platform/xamarin-forms/custom-renderer/contentpage/

Android页面是一个带标签的简单页面 - 不要以为你需要看到它。 共享PCL项目中的页面只是一个空的Xamarin.Forms Xaml页面。

有什么建议吗?

我也想知道如何创建自己的活动 - 并将其设置为上下文。如果我尝试设置这样的上下文:

 protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
    {
        base.OnElementChanged(e);
        activity = this.Context as CameraActivity;
        view =activity.LayoutInflater.Inflate(Resource.Layout.TestLayout, this, true);
        AddView(view);
    }

活动设置为null。提前感谢任何建议。

2 个答案:

答案 0 :(得分:0)

这是很老的帖子,但答案似乎很简单。代码缺少一个保护检查,它应该是这样的:

protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
{
    base.OnElementChanged(e);

    if (e.OldElement != null || Element == null) 
    {
        return;
    }
    ...
}

答案 1 :(得分:-1)

您应该将this.Context替换为Forms.Context