2015-12-16 1 views
1

Im пытается создать простой вид на Android. Как только я получу все. с рендерером для работы - он будет реализован как просмотр камеры.Xamarin формирует собственный рендерер android stackoverflowerror

Мой Renderer:

[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

Где находится трассировка стека? Без него трудно догадаться, что переполняет его. Вот проект евангелиста Xamarin, в котором есть средство просмотра страницы камеры: https://github.com/pierceboggan/Moments –

ответ

-1

Вы должны заменить this.Context на Forms.Context.

+1

Если вы можете, добавьте объяснение. – FlanschiFox

0

Это очень старый пост, но ответ кажется простым. В коде отсутствует проверочная проверка, и она должна выглядеть так:

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^