CollectionView: Adding groups leads to "IndexOutOfBoundsException: Inconsistency detected"
Description
Adding groups to a CollectionView sometimes leads to a IndexOutOfBoundsException - see "Log output" for complete stacktrace.
Steps to Reproduce
- Clone https://github.com/markusroessler/MauiCollectionViewInconsistencyDetected
- Start the app
- Click the "Add Items"-Button and scroll to the bottom (two new groups should appear at the bottom after each click)
- 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)
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:
- [Android] CarouselView: VirtualView cannot be null here, when clearing and adding items on second navigation (#22035), similarity score: 0.80
- ListView with IsGroupingEnabled = true throws System.NullReferenceException in Android outside of single project structure (#19845), similarity score: 0.80
Closed similar issues:
- Error "NSInternalInconsistencyException Reason: Invalid update: invalid number of sections" in CollectionView on iOS still not closed (#16438), similarity score: 0.80
- [regression/8.0.0-rc1] [Android] Removing ItemSource item in ListView causes crash (#17028), similarity score: 0.80
- [Android] ListView with ItemsSource ObservableCollection crashes on item removal (#7311), similarity score: 0.80
Note: You can give me feedback by thumbs upping or thumbs downing this comment.
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
Still reproducibly with MAUI 8.0.70. We are constantly running into this bug. Would be nice, if someone could have look.
The same issue for me on the prod is reported by Google Play. I'm unable to reproduce it locally. MAUI 8.0.70
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?
For me it only happens when inserting an item into the first group when there is already another group below it.
The issue is not reproducible with the latest NuGet package (9.0.60) on Android API 33. I have attached a video for reference
https://github.com/user-attachments/assets/4cbd26ee-3563-4d98-9aed-28f72a9681ba
I can confirm this is not reproducible with Maui 9.0.60.