roubachof/Sharpnado.CollectionView

NullReferenceException on custom NavigationPage

Closed this issue · 1 comments

Platform (please complete the following information):

  • OS: Android
  • Device: AndroidEmulator
  • Sdk version: Android SDK 29
  • Xamarin.Forms: [5.0.0.2012]

Describe the bug
I am using prism to create a modular application and for all pages I am using a custom NavigationPage to remove the background from the Back and Toolbar keys. When I use HorizontalListView with associated list in its ItemSource it gives me NullReferenceException when it has to create the Layout (It only happens if the list is NOT empty), I tried with the Binding and to associate it from the code behind but it doesn't change anything.

To Reproduce
Xamarin Forms Class:

 public partial class CommonNavigationPage : NavigationPage
    {
        #region Public Constructors

        public CommonNavigationPage() : base()
        {
            InitializeComponent();
        }

        public CommonNavigationPage(Page root) : base(root)
        {
            InitializeComponent();
        }

        #endregion Public Constructors



        #region Public Properties

        public bool IgnoreLayoutChange { get; set; } = false;

        #endregion Public Properties



        #region Protected Methods

        protected override void OnSizeAllocated(double width, double height)
        {
            if (!IgnoreLayoutChange)
                base.OnSizeAllocated(width, height);
        }

        #endregion Protected Methods
    }

Xamarin Android Renderer:

  public class CommonNavigationPageRenderer : NavigationPageRenderer
    {
        #region Public Constructors

        public CommonNavigationPageRenderer(Context context) : base(context)
        {
        }

        #endregion Public Constructors

        #region Private Properties

        private CommonNavigationPage CustomNavigationPage => Element as CommonNavigationPage;
        private IPageController PageController => Element;

        #endregion Private Properties

        #region Protected Methods

        
        protected override void OnLayout(bool changed, int l, int t, int r, int b)
        {
            CustomNavigationPage.IgnoreLayoutChange = true;
            base.OnLayout(changed, l, t, r, b);    //<-- IT HAPPENS HERE
            CustomNavigationPage.IgnoreLayoutChange = false;

            int containerHeight = b - t;

            PageController.ContainerArea = new Rectangle(0, 0, Context.FromPixels(r - l), Context.FromPixels(containerHeight));

            for (var i = 0; i < ChildCount; i++)
            {
                AView child = GetChildAt(i);

                if (child is Android.Support.V7.Widget.Toolbar)
                {
                    continue;
                }

                child.Layout(0, 0, r, b);
            }
        }
        

        #endregion Protected Methods
    }

Exceptions (if applicable)
Copy paste the exception and the stack trace

System.NullReferenceException: Object reference not set to an instance of an object.
       at Sharpnado.HorizontalListView.Droid.Renderers.HorizontalList.AndroidHorizontalListViewRenderer+RecycleViewAdapter.CreateView (Xamarin.Forms.ViewCell& viewCell, System.Int32 itemViewType)(D:\Dev\Sharpnado\src\Sharpnado.HorizontalListView\Sharpnado.HorizontalListView.Droid\Renderers\HorizontalList\AndroidHorizontalListViewRenderer.RecycleViewAdapter.cs:355)
       at Sharpnado.HorizontalListView.Droid.Renderers.HorizontalList.AndroidHorizontalListViewRenderer+RecycleViewAdapter.CreateViewHolder (System.Int32 itemViewType)(D:\Dev\Sharpnado\src\Sharpnado.HorizontalListView\Sharpnado.HorizontalListView.Droid\Renderers\HorizontalList\AndroidHorizontalListViewRenderer.RecycleViewAdapter.cs:309)
       at Sharpnado.HorizontalListView.Droid.Renderers.HorizontalList.AndroidHorizontalListViewRenderer+RecycleViewAdapter.<.ctor>b__15_0 ()(D:\Dev\Sharpnado\src\Sharpnado.HorizontalListView\Sharpnado.HorizontalListView.Droid\Renderers\HorizontalList\AndroidHorizontalListViewRenderer.RecycleViewAdapter.cs:146)
       at Sharpnado.HorizontalListView.Droid.Renderers.HorizontalList.ViewHolderQueue.Dequeue ()(D:\Dev\Sharpnado\src\Sharpnado.HorizontalListView\Sharpnado.HorizontalListView.Droid\Renderers\HorizontalList\ViewHolderQueue.cs:67)
       at Sharpnado.HorizontalListView.Droid.Renderers.HorizontalList.AndroidHorizontalListViewRenderer+RecycleViewAdapter.OnCreateViewHolder (Android.Views.ViewGroup parent, System.Int32 viewType)(D:\Dev\Sharpnado\src\Sharpnado.HorizontalListView\Sharpnado.HorizontalListView.Droid\Renderers\HorizontalList\AndroidHorizontalListViewRenderer.RecycleViewAdapter.cs:219)
       at AndroidX.RecyclerView.Widget.RecyclerView+Adapter.n_OnCreateViewHolder_Landroid_view_ViewGroup_I (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_parent, System.Int32 viewType)(D:\a\1\s\generated\androidx.recyclerview.recyclerview\obj\Release\monoandroid90\generated\src\AndroidX.RecyclerView.Widget.RecyclerView.cs:488)

should be fixed by last version (maybe :) ?)