maui icon indicating copy to clipboard operation
maui copied to clipboard

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

Open markusroessler opened this issue 1 year ago • 1 comments

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)

markusroessler avatar May 24 '24 11:05 markusroessler

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.

github-actions[bot] avatar May 24 '24 11:05 github-actions[bot]

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

mfeingol avatar Jun 14 '24 19:06 mfeingol

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

markusroessler avatar Jul 11 '24 11:07 markusroessler

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

alexsmi-noveo avatar Jul 15 '24 13:07 alexsmi-noveo

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?

mfeingol avatar Sep 13 '24 18:09 mfeingol

For me it only happens when inserting an item into the first group when there is already another group below it.

JaixTim avatar Nov 27 '24 07:11 JaixTim

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

Ahamed-Ali avatar Apr 21 '25 07:04 Ahamed-Ali

I can confirm this is not reproducible with Maui 9.0.60.

markusroessler avatar Apr 25 '25 15:04 markusroessler