dotnet / maui

.NET MAUI is the .NET Multi-platform App UI, a framework for building native device applications spanning mobile, tablet, and desktop.
https://dot.net/maui
MIT License
21.99k stars 1.72k forks source link

CollectionView: Adding groups leads to "IndexOutOfBoundsException: Inconsistency detected" #22638

Open markusroessler opened 3 months ago

markusroessler commented 3 months ago

Description

Adding groups to a CollectionView sometimes leads to a IndexOutOfBoundsException - see "Log output" for complete stacktrace.

Steps to Reproduce

  1. Clone https://github.com/markusroessler/MauiCollectionViewInconsistencyDetected
  2. Start the app
  3. Click the "Add Items"-Button and scroll to the bottom (two new groups should appear at the bottom after each click)
  4. Repeat step 3 until the exception occurs (usually happens on the second try)

Link to public reproduction project repository

https://github.com/markusroessler/MauiCollectionViewInconsistencyDetected

Version with bug

8.0.40 SR5

Is this a regression from previous behavior?

Yes, this used to work in Xamarin.Forms

Last version that worked well

Unknown/Other

Affected platforms

Android

Affected platform versions

Android 10

Did you find any workaround?

Recreate the ItemsSource/ObservableCollection instead of adding items to the existing one. Performance will obviously be worse when doing this.

Relevant log output

Java.Lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionTemplatedItemViewHolder{6257c03 position=31 id=-1, oldPos=25, pLpos:25 scrap [attachedScrap] tmpDetached no parent} crc645d80431ce5f73f11.MauiRecyclerView_3{caadd54 VFED..... ......I. 0,121-1080,1988}, adapter:crc645d80431ce5f73f11.ReorderableItemsViewAdapter_2@a5ca3ee, layout:androidx.recyclerview.widget.LinearLayoutManager@6ea4384, context:crc64e550a20d138f04c9.MainActivity@6bea620
  at Java.Interop.JniEnvironment.StaticMethods.CallStaticLongMethod(JniObjectReference type, JniMethodInfo method, JniArgumentValue* args) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/obj/Release/net7.0/JniEnvironment.g.cs:21705
  at Java.Interop.JniPeerMembers.JniStaticMethods.InvokeInt64Method(String encodedMember, JniArgumentValue* parameters) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop/JniPeerMembers.JniStaticMethods.cs:147
  at Microsoft.Maui.PlatformInterop.MeasureAndGetWidthAndHeight(View view, Int32 widthMeasureSpec, Int32 heightMeasureSpec) in D:\a\_work\1\s\artifacts\obj\Core\Release\net8.0-android\generated\src\Microsoft.Maui.PlatformInterop.cs:580
  at Microsoft.Maui.ViewHandlerExtensions.GetDesiredSizeFromHandler(IViewHandler viewHandler, Double widthConstraint, Double heightConstraint) in D:\a\_work\1\s\src\Core\src\Handlers\ViewHandlerExtensions.Android.cs:93
  at Microsoft.Maui.Handlers.ViewHandler`2[[Microsoft.Maui.Controls.ReorderableItemsView, Microsoft.Maui.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[AndroidX.RecyclerView.Widget.RecyclerView, Xamarin.AndroidX.RecyclerView, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].GetDesiredSize(Double widthConstraint, Double heightConstraint) in D:\a\_work\1\s\src\Core\src\Handlers\View\ViewHandlerOfT.Android.cs:18
  at Microsoft.Maui.Controls.Handlers.Items.ItemsViewHandler`1[[Microsoft.Maui.Controls.ReorderableItemsView, Microsoft.Maui.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].GetDesiredSize(Double widthConstraint, Double heightConstraint) in D:\a\_work\1\s\src\Controls\src\Core\Handlers\Items\ItemsViewHandler.Android.cs:49
  at Microsoft.Maui.Layouts.LayoutExtensions.ComputeDesiredSize(IView view, Double widthConstraint, Double heightConstraint) in D:\a\_work\1\s\src\Core\src\Layouts\LayoutExtensions.cs:27
  at Microsoft.Maui.Controls.VisualElement.MeasureOverride(Double widthConstraint, Double heightConstraint) in D:\a\_work\1\s\src\Controls\src\Core\VisualElement\VisualElement.cs:1893
  at Microsoft.Maui.Controls.VisualElement.Microsoft.Maui.IView.Measure(Double widthConstraint, Double heightConstraint) in D:\a\_work\1\s\src\Controls\src\Core\VisualElement\VisualElement.cs:1880
  at Microsoft.Maui.Layouts.GridLayoutManager.GridStructure.MeasureCell(Cell cell, Double width, Double height) in D:\a\_work\1\s\src\Core\src\Layouts\GridLayoutManager.cs:383
  at Microsoft.Maui.Layouts.GridLayoutManager.GridStructure.SecondMeasurePass() in D:\a\_work\1\s\src\Core\src\Layouts\GridLayoutManager.cs:475
  at Microsoft.Maui.Layouts.GridLayoutManager.GridStructure.MeasureCells() in D:\a\_work\1\s\src\Core\src\Layouts\GridLayoutManager.cs:372
  at Microsoft.Maui.Layouts.GridLayoutManager.GridStructure..ctor(IGridLayout grid, Double widthConstraint, Double heightConstraint) in D:\a\_work\1\s\src\Core\src\Layouts\GridLayoutManager.cs:144
  at Microsoft.Maui.Layouts.GridLayoutManager.Measure(Double widthConstraint, Double heightConstraint) in D:\a\_work\1\s\src\Core\src\Layouts\GridLayoutManager.cs:24
  at Microsoft.Maui.Controls.Layout.CrossPlatformMeasure(Double widthConstraint, Double heightConstraint) in D:\a\_work\1\s\src\Controls\src\Core\Layout\Layout.cs:354
  at Microsoft.Maui.Platform.LayoutViewGroup.CrossPlatformMeasure(Double widthConstraint, Double heightConstraint) in D:\a\_work\1\s\src\Core\src\Platform\Android\LayoutViewGroup.cs:57
  at Microsoft.Maui.Platform.LayoutViewGroup.OnMeasure(Int32 widthMeasureSpec, Int32 heightMeasureSpec) in D:\a\_work\1\s\src\Core\src\Platform\Android\LayoutViewGroup.cs:82
  at Android.Views.View.n_OnMeasure_II(IntPtr jnienv, IntPtr native__this, Int32 widthMeasureSpec, Int32 heightMeasureSpec) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/obj/Release/net8.0/android-34/mcw/Android.Views.View.cs:19598
  at Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PPII_V(_JniMarshal_PPII_V callback, IntPtr jnienv, IntPtr klazz, Int32 p0, Int32 p1) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs:154
  at Java.Interop.JniEnvironment.StaticMethods.CallStaticLongMethod(JniObjectReference type, JniMethodInfo method, JniArgumentValue* args) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/obj/Release/net7.0/JniEnvironment.g.cs:21700
  at Java.Interop.JniPeerMembers.JniStaticMethods.InvokeInt64Method(String encodedMember, JniArgumentValue* parameters) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop/JniPeerMembers.JniStaticMethods.cs:147
  at Microsoft.Maui.PlatformInterop.MeasureAndGetWidthAndHeight(View view, Int32 widthMeasureSpec, Int32 heightMeasureSpec) in D:\a\_work\1\s\artifacts\obj\Core\Release\net8.0-android\generated\src\Microsoft.Maui.PlatformInterop.cs:580
  at Microsoft.Maui.ViewHandlerExtensions.GetDesiredSizeFromHandler(IViewHandler viewHandler, Double widthConstraint, Double heightConstraint) in D:\a\_work\1\s\src\Core\src\Handlers\ViewHandlerExtensions.Android.cs:93
  at Microsoft.Maui.Handlers.ViewHandler`2[[Microsoft.Maui.ILayout, Microsoft.Maui, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[Microsoft.Maui.Platform.LayoutViewGroup, Microsoft.Maui, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].GetDesiredSize(Double widthConstraint, Double heightConstraint) in D:\a\_work\1\s\src\Core\src\Handlers\View\ViewHandlerOfT.Android.cs:18
  at Microsoft.Maui.Layouts.LayoutExtensions.ComputeDesiredSize(IView view, Double widthConstraint, Double heightConstraint) in D:\a\_work\1\s\src\Core\src\Layouts\LayoutExtensions.cs:27
  at Microsoft.Maui.Controls.VisualElement.MeasureOverride(Double widthConstraint, Double heightConstraint) in D:\a\_work\1\s\src\Controls\src\Core\VisualElement\VisualElement.cs:1893
  at Microsoft.Maui.Controls.VisualElement.Microsoft.Maui.IView.Measure(Double widthConstraint, Double heightConstraint) in D:\a\_work\1\s\src\Controls\src\Core\VisualElement\VisualElement.cs:1880
  at Microsoft.Maui.Layouts.LayoutExtensions.MeasureContent(IContentView contentView, Thickness inset, Double widthConstraint, Double heightConstraint) in D:\a\_work\1\s\src\Core\src\Layouts\LayoutExtensions.cs:163
  at Microsoft.Maui.Layouts.LayoutExtensions.MeasureContent(IContentView contentView, Double widthConstraint, Double heightConstraint) in D:\a\_work\1\s\src\Core\src\Layouts\LayoutExtensions.cs:142
  at Microsoft.Maui.Controls.ContentPage.Microsoft.Maui.ICrossPlatformLayout.CrossPlatformMeasure(Double widthConstraint, Double heightConstraint) in D:\a\_work\1\s\src\Controls\src\Core\ContentPage\ContentPage.cs:85
  at Microsoft.Maui.Platform.ContentViewGroup.CrossPlatformMeasure(Double widthConstraint, Double heightConstraint) in D:\a\_work\1\s\src\Core\src\Platform\Android\ContentViewGroup.cs:51
  at Microsoft.Maui.Platform.ContentViewGroup.OnMeasure(Int32 widthMeasureSpec, Int32 heightMeasureSpec) in D:\a\_work\1\s\src\Core\src\Platform\Android\ContentViewGroup.cs:73
  at Android.Views.View.n_OnMeasure_II(IntPtr jnienv, IntPtr native__this, Int32 widthMeasureSpec, Int32 heightMeasureSpec) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/obj/Release/net8.0/android-34/mcw/Android.Views.View.cs:19598
  at Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PPII_V(_JniMarshal_PPII_V callback, IntPtr jnienv, IntPtr klazz, Int32 p0, Int32 p1) in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs:154
  at java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionTemplatedItemViewHolder{6257c03 position=31 id=-1, oldPos=25, pLpos:25 scrap [attachedScrap] tmpDetached no parent} crc645d80431ce5f73f11.MauiRecyclerView_3{caadd54 VFED..... ......I. 0,121-1080,1988}, adapter:crc645d80431ce5f73f11.ReorderableItemsViewAdapter_2@a5ca3ee, layout:androidx.recyclerview.widget.LinearLayoutManager@6ea4384, context:crc64e550a20d138f04c9.MainActivity@6bea620
  at at androidx.recyclerview.widget.RecyclerView$Recycler.validateViewHolderForOffsetPosition(RecyclerView.java:6544)
  at at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6727)
  at at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6688)
  at at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6684)
  at at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2362)
  at at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1662)
  at at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1622)
  at at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:687)
  at at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:4550)
  at at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3975)
  at at android.view.View.measure(View.java:24530)
  at at com.microsoft.maui.PlatformInterop.measureAndGetWidthAndHeight(PlatformInterop.java:404)
  at at crc6452ffdc5b34af3a0f.LayoutViewGroup.n_onMeasure(Native Method)
  at at crc6452ffdc5b34af3a0f.LayoutViewGroup.onMeasure(LayoutViewGroup.java:59)
  at at android.view.View.measure(View.java:24530)
  at at com.microsoft.maui.PlatformInterop.measureAndGetWidthAndHeight(PlatformInterop.java:404)
  at at crc6452ffdc5b34af3a0f.ContentViewGroup.n_onMeasure(Native Method)
  at at crc6452ffdc5b34af3a0f.ContentViewGroup.onMeasure(ContentViewGroup.java:59)
  at at android.view.View.measure(View.java:24530)
  at at crc640ec207abc449b2ca.ShellPageContainer.n_onMeasure(Native Method)
  at at crc640ec207abc449b2ca.ShellPageContainer.onMeasure(ShellPageContainer.java:66)
  at at android.view.View.measure(View.java:24530)
  at at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6828)
  at at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
  at at android.view.View.measure(View.java:24530)
  at at androidx.recyclerview.widget.RecyclerView$LayoutManager.measureChildWithMargins(RecyclerView.java:10124)
  at at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1688)
  at at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1622)
  at at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:687)
  at at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4604)
  at at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:4307)
  at at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4873)
  at at android.view.View.layout(View.java:21912)
  at at android.view.ViewGroup.layout(ViewGroup.java:6260)
  at at androidx.viewpager2.widget.ViewPager2.onLayout(ViewPager2.java:527)
  at at android.view.View.layout(View.java:21912)
  at at android.view.ViewGroup.layout(ViewGroup.java:6260)
  at at com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:149)
  at at com.google.android.material.appbar.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:43)
  at at com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:2376)
  at at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:953)
  at at android.view.View.layout(View.java:21912)
  at at android.view.ViewGroup.layout(ViewGroup.java:6260)
  at at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
  at at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
  at at android.view.View.layout(View.java:21912)
  at at android.view.ViewGroup.layout(ViewGroup.java:6260)
  at at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
  at at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
  at at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
  at at android.view.View.layout(View.java:21912)
  at at android.view.ViewGroup.layout(ViewGroup.java:6260)
  at at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
  at at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
  at at android.view.View.layout(View.java:21912)
  at at android.view.ViewGroup.layout(ViewGroup.java:6260)
  at at androidx.drawerlayout.widget.DrawerLayout.onLayout(DrawerLayout.java:1273)
  at at android.view.View.layout(View.java:21912)
  at at android.view.ViewGroup.layout(ViewGroup.java:6260)
  at at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
  at at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1818)
  at at android.widget.LinearLayout.onLayout(LinearLayout.java:1584)
  at at android.view.View.layout(View.java:21912)
  at at android.view.ViewGroup.layout(ViewGroup.java:6260)
  at at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
  at at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
  at at android.view.View.layout(View.java:21912)
  at at android.view.ViewGroup.layout(ViewGroup.java:6260)
  at at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
  at at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
  at at android.view.View.layout(View.java:21912)
  at at android.view.ViewGroup.layout(ViewGroup.java:6260)
  at at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
  at at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
  at at android.view.View.layout(View.java:21912)
  at at android.view.ViewGroup.layout(ViewGroup.java:6260)
  at at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
  at at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
  at at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
  at at android.view.View.layout(View.java:21912)
  at at android.view.ViewGroup.layout(ViewGroup.java:6260)
  at at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
  at at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
  at at com.android.internal.policy.DecorView.onLayout(DecorView.java:779)
  at at android.view.View.layout(View.java:21912)
  at at android.view.ViewGroup.layout(ViewGroup.java:6260)
  at at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3080)
  at at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2590)
  at at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1721)
  at at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7598)
  at at android.view.Choreographer$CallbackRecord.run(Choreographer.java:966)
  at at android.view.Choreographer.doCallbacks(Choreographer.java:790)
  at at android.view.Choreographer.doFrame(Choreographer.java:725)
  at at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:951)
  at at android.os.Handler.handleCallback(Handler.java:883)
  at at android.os.Handler.dispatchMessage(Handler.java:100)
  at at android.os.Looper.loop(Looper.java:214)
  at at android.app.ActivityThread.main(ActivityThread.java:7356)
  at at java.lang.reflect.Method.invoke(Native Method)
  at at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
  at at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
github-actions[bot] commented 3 months ago

Hi I'm an AI powered bot that finds similar issues based off the issue title.

Please view the issues below to see if they solve your problem, and if the issue describes your problem please consider closing this one and thumbs upping the other issue to help us prioritize it. Thank you!

Open similar issues:

Closed similar issues:

Note: You can give me feedback by thumbs upping or thumbs downing this comment.

mfeingol commented 3 months ago

I just ran into the same issue adding groups to a CollectionView.

Java.Lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionTemplatedItemViewHolder{8c00d2a position=41 id=-1, oldPos=32, pLpos:32 scrap [changeScrap] update tmpDetached not recyclable(1) no parent} crc645d80431ce5f73f11.MauiRecyclerView_3{21aafe3 VFED..... ......ID 0,0-1440,2444}, adapter:crc645d80431ce5f73f11.ReorderableItemsViewAdapter_2@bd0dc3c, layout:androidx.recyclerview.widget.LinearLayoutManager@576fdc2, context:crc6446b5211041beaccb.MainActivity@9e473ab

Stack trace:

Java.Interop.JniEnvironment.InstanceMethods.CallNonvirtualVoidMethod(JniObjectReference , JniObjectReference , JniMethodInfo , JniArgumentValue* )
Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeVirtualVoidMethod(String , IJavaPeerable , JniArgumentValue* )
AndroidX.RecyclerView.Widget.RecyclerView.OnLayout(Boolean , Int32 , Int32 , Int32 , Int32 )
Microsoft.Maui.Controls.Handlers.Items.MauiRecyclerView`3[[Microsoft.Maui.Controls.ReorderableItemsView, Microsoft.Maui.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[Microsoft.Maui.Controls.Handlers.Items.GroupableItemsViewAdapter`2[[Microsoft.Maui.Controls.ReorderableItemsView, Microsoft.Maui.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[Microsoft.Maui.Controls.Handlers.Items.IGroupableItemsViewSource, Microsoft.Maui.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], Microsoft.Maui.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[Microsoft.Maui.Controls.Handlers.Items.IGroupableItemsViewSource, Microsoft.Maui.Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].OnLayout(Boolean changed, Int32 l, Int32 t, Int32 r, Int32 b)
AndroidX.RecyclerView.Widget.RecyclerView.n_OnLayout_ZIIII(IntPtr jnienv, IntPtr native__this, Boolean changed, Int32 l, Int32 t, Int32 r, Int32 b)
Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PPZIIII_V(_JniMarshal_PPZIIII_V callback, IntPtr jnienv, IntPtr klazz, Boolean p0, Int32 p1, Int32 p2, Int32 p3, Int32 p4)
java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionTemplatedItemViewHolder{8c00d2a position=41 id=-1, oldPos=32, pLpos:32 scrap [changeScrap] update tmpDetached not recyclable(1) no parent} crc645d80431ce5f73f11.MauiRecyclerView_3{21aafe3 VFED..... ......ID 0,0-1440,2444}, adapter:crc645d80431ce5f73f11.ReorderableItemsViewAdapter_2@bd0dc3c, layout:androidx.recyclerview.widget.LinearLayoutManager@576fdc2, context:crc6446b5211041beaccb.MainActivity@9e473ab
androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(SourceFile:539)
androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(SourceFile:2)
androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(SourceFile:1)
androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(SourceFile:54)
androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(SourceFile:1)
androidx.recyclerview.widget.LinearLayoutManager.fill(SourceFile:49)
androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(SourceFile:765)
androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep1(SourceFile:350)
androidx.recyclerview.widget.RecyclerView.dispatchLayout(SourceFile:64)
androidx.recyclerview.widget.RecyclerView.onLayout(SourceFile:8)
crc645d80431ce5f73f11.MauiRecyclerView_3.n_onLayout(Native Method)
crc645d80431ce5f73f11.MauiRecyclerView_3.onLayout(SourceFile:1)
android.view.View.layout View.java:24421
android.view.ViewGroup.layout ViewGroup.java:6440
androidx.swiperefreshlayout.widget.SwipeRefreshLayout.onLayout(SourceFile:59)
android.view.View.layout View.java:24421
android.view.ViewGroup.layout ViewGroup.java:6440
crc6452ffdc5b34af3a0f.LayoutViewGroup.n_onLayout(Native Method)
crc6452ffdc5b34af3a0f.LayoutViewGroup.onLayout(SourceFile:1)
android.view.View.layout View.java:24421
android.view.ViewGroup.layout ViewGroup.java:6440
crc6452ffdc5b34af3a0f.ContentViewGroup.n_onLayout(Native Method)
crc6452ffdc5b34af3a0f.ContentViewGroup.onLayout(SourceFile:1)
android.view.View.layout View.java:24421
android.view.ViewGroup.layout ViewGroup.java:6440
android.widget.FrameLayout.layoutChildren FrameLayout.java:332
android.widget.FrameLayout.onLayout FrameLayout.java:270
android.view.View.layout View.java:24421
android.view.ViewGroup.layout ViewGroup.java:6440
androidx.recyclerview.widget.RecyclerView$LayoutManager.layoutDecoratedWithMargins(SourceFile:33)
androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(SourceFile:171)
androidx.recyclerview.widget.LinearLayoutManager.fill(SourceFile:49)
androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(SourceFile:765)
androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(SourceFile:67)
androidx.recyclerview.widget.RecyclerView.dispatchLayout(SourceFile:72)
androidx.recyclerview.widget.RecyclerView.onLayout(SourceFile:8)
android.view.View.layout View.java:24421
android.view.ViewGroup.layout ViewGroup.java:6440
androidx.viewpager2.widget.ViewPager2.onLayout(SourceFile:61)
android.view.View.layout View.java:24421
android.view.ViewGroup.layout ViewGroup.java:6440
android.widget.FrameLayout.layoutChildren FrameLayout.java:332
android.widget.FrameLayout.onLayout FrameLayout.java:270
android.view.View.layout View.java:24421
android.view.ViewGroup.layout ViewGroup.java:6440
android.widget.FrameLayout.layoutChildren FrameLayout.java:332
android.widget.FrameLayout.onLayout FrameLayout.java:270
android.view.View.layout View.java:24421
android.view.ViewGroup.layout ViewGroup.java:6440
android.widget.FrameLayout.layoutChildren FrameLayout.java:332
android.widget.FrameLayout.onLayout FrameLayout.java:270
android.view.View.layout View.java:24421
android.view.ViewGroup.layout ViewGroup.java:6440
com.google.android.material.appbar.HeaderScrollingViewBehavior.layoutChild(SourceFile:157)
com.google.android.material.appbar.ViewOffsetBehavior.onLayoutChild(SourceFile:1)
androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(SourceFile:43)
android.view.View.layout View.java:24421
android.view.ViewGroup.layout ViewGroup.java:6440
androidx.drawerlayout.widget.DrawerLayout.onLayout(SourceFile:57)
android.view.View.layout View.java:24421
android.view.ViewGroup.layout ViewGroup.java:6440
android.widget.LinearLayout.setChildFrame LinearLayout.java:1891
android.widget.LinearLayout.layoutHorizontal LinearLayout.java:1880
android.widget.LinearLayout.onLayout LinearLayout.java:1640
android.view.View.layout View.java:24421
android.view.ViewGroup.layout ViewGroup.java:6440
android.widget.FrameLayout.layoutChildren FrameLayout.java:332
android.widget.FrameLayout.onLayout FrameLayout.java:270
android.view.View.layout View.java:24421
android.view.ViewGroup.layout ViewGroup.java:6440
android.widget.FrameLayout.layoutChildren FrameLayout.java:332
android.widget.FrameLayout.onLayout FrameLayout.java:270
android.view.View.layout View.java:24421
android.view.ViewGroup.layout ViewGroup.java:6440
android.widget.FrameLayout.layoutChildren FrameLayout.java:332
android.widget.FrameLayout.onLayout FrameLayout.java:270
android.view.View.layout View.java:24421
android.view.ViewGroup.layout ViewGroup.java:6440
android.widget.LinearLayout.setChildFrame LinearLayout.java:1891
android.widget.LinearLayout.layoutVertical LinearLayout.java:1729
android.widget.LinearLayout.onLayout LinearLayout.java:1638
android.view.View.layout View.java:24421
android.view.ViewGroup.layout ViewGroup.java:6440
android.widget.FrameLayout.layoutChildren FrameLayout.java:332
android.widget.FrameLayout.onLayout FrameLayout.java:270
com.android.internal.policy.DecorView.onLayout DecorView.java:789
android.view.View.layout View.java:24421
android.view.ViewGroup.layout ViewGroup.java:6440
android.view.ViewRootImpl.performLayout ViewRootImpl.java:4258
android.view.ViewRootImpl.performTraversals ViewRootImpl.java:3583
android.view.ViewRootImpl.doTraversal ViewRootImpl.java:2465
android.view.ViewRootImpl$TraversalRunnable.run ViewRootImpl.java:9305
android.view.Choreographer$CallbackRecord.run Choreographer.java:1339
android.view.Choreographer$CallbackRecord.run Choreographer.java:1348
android.view.Choreographer.doCallbacks Choreographer.java:952
android.view.Choreographer.doFrame Choreographer.java:882
android.view.Choreographer$FrameDisplayEventReceiver.run Choreographer.java:1322
android.os.Handler.handleCallback Handler.java:958
android.os.Handler.dispatchMessage Handler.java:99
android.os.Looper.loopOnce Looper.java:205
android.os.Looper.loop Looper.java:294
android.app.ActivityThread.main ActivityThread.java:8177
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run RuntimeInit.java:552
com.android.internal.os.ZygoteInit.main ZygoteInit.java:971
markusroessler commented 2 months ago

Still reproducibly with MAUI 8.0.70. We are constantly running into this bug. Would be nice, if someone could have look.

alexsmi-noveo commented 2 months ago

The same issue for me on the prod is reported by Google Play. I'm unable to reproduce it locally. MAUI 8.0.70

mfeingol commented 1 day ago

I'm still seeing this bug, which is a bit of a showstopper as it leads to random app crashes. We can no longer deploy Xamarin Forms updates to Google Play, due to lack of support for Android 14. So the fact this is still a MAUI bug is disheartening.

Has anyone found a workaround besides reallocating the ObservableCollection?