我试图创建一个简单的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。提前感谢任何建议。
答案 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
。