NullReferenceException on custom NavigationPage
Closed this issue · 1 comments
anversoft commented
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)
roubachof commented
should be fixed by last version (maybe :) ?)