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
22.04k stars 1.73k forks source link

ListView throws a IllegalStateException IllegalStateException #3455

Closed mattleibow closed 2 years ago

mattleibow commented 2 years ago

Description

This can be observed in the Essentials sample which uses a ListView. The page loads fine, but when the keyboard opens and the ListView is resized, the cell throws an exception. Switching to CollectionView does not throw and displays correctly.

Java.Lang.IllegalStateException: 'The specified child already has a parent. You must call removeView() on the child's parent first.'
    0x10 in Android.Runtime.JNIEnv.monodroid_debugger_unhandled_exception   C#
    0x33 in Android.Runtime.DynamicMethodNameCounter.83 C#
    0x17 in System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw    C#
    0x8E in Java.Interop.JniEnvironment.InstanceMethods.CallNonvirtualVoidMethod at /Users/builder/azdo/_work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop/JniEnvironment.g.cs:12083,5   C#
    0x65 in Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeVirtualVoidMethod at /Users/builder/azdo/_work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop/JniPeerMembers.JniInstanceMethods_Invoke.cs:35,5    C#
    0x38 in Android.Views.ViewGroup.AddView at /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/obj/Release/net6.0/android-31/mcw/Android.Views.ViewGroup.cs:2129,5   C#
>   0xB4 in Microsoft.Maui.Handlers.LayoutHandler.SetVirtualView at C:\Projects\Maui\src\Core\src\Handlers\Layout\LayoutHandler.Android.cs:41,5 C#
    0x7 in Microsoft.Maui.Handlers.ViewHandler<Microsoft.Maui.ILayout,Microsoft.Maui.Handlers.LayoutViewGroup>.SetVirtualView at C:\Projects\Maui\src\Core\src\Handlers\View\ViewHandlerOfT.cs:54,4 C#
    0x7C in Microsoft.Maui.Controls.Element.SetHandler at C:\Projects\Maui\src\Controls\src\Core\HandlerImpl\Element.Impl.cs:62,6   C#
    0x2 in Microsoft.Maui.Controls.Element.set_Handler at C:\Projects\Maui\src\Controls\src\Core\HandlerImpl\Element.Impl.cs:18,11  C#
    0x2 in Microsoft.Maui.Controls.VisualElement.set_Handler at C:\Projects\Maui\src\Controls\src\Core\HandlerImpl\VisualElement\VisualElement.Impl.cs:27,11    C#
    0x13C in Microsoft.Maui.Controls.Compatibility.Platform.Android.Platform.CreateRenderer at C:\Projects\Maui\src\Compatibility\Core\src\Android\AppCompat\Platform.cs:364,6  C#
    0xDA in Microsoft.Maui.Controls.Compatibility.Platform.Android.ViewCellRenderer.GetCellCore at C:\Projects\Maui\src\Compatibility\Core\src\Android\Cells\ViewCellRenderer.cs:45,4   C#
    0xAA in Microsoft.Maui.Controls.Compatibility.Platform.Android.CellRenderer.GetCell at C:\Projects\Maui\src\Compatibility\Core\src\Android\Cells\CellRenderer.cs:51,4   C#
    0x2C in Microsoft.Maui.Controls.Compatibility.Platform.Android.CellFactory.GetCell at C:\Projects\Maui\src\Compatibility\Core\src\Android\Cells\CellFactory.cs:20,4 C#
    0x2A4 in Microsoft.Maui.Controls.Compatibility.Platform.Android.ListViewAdapter.GetView at C:\Projects\Maui\src\Compatibility\Core\src\Android\Renderers\ListViewAdapter.cs:299,4   C#
    0x1C in Android.Widget.BaseAdapter.n_GetView_ILandroid_view_View_Landroid_view_ViewGroup_ at /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/obj/Release/net6.0/android-31/mcw/Android.Widget.BaseAdapter.cs:557,4   C#
    0x23 in Android.Runtime.DynamicMethodNameCounter.83 C#
    0x39 in Java.Interop.NativeMethods.java_interop_jnienv_call_nonvirtual_void_method_a    C#
    0x79 in Java.Interop.JniEnvironment.InstanceMethods.CallNonvirtualVoidMethod at /Users/builder/azdo/_work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop/JniEnvironment.g.cs:12079,4   C#
    0x21 in Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeNonvirtualVoidMethod at /Users/builder/azdo/_work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop/JniPeerMembers.JniInstanceMethods_Invoke.cs:46,5 C#
    0x69 in Android.Views.ViewGroup.Layout at /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/obj/Release/net6.0/android-31/mcw/Android.Views.ViewGroup.cs:3556,5    C#
    0x6E in Microsoft.Maui.Controls.Compatibility.Platform.Android.ViewRenderer<Microsoft.Maui.Controls.ListView,Android.Widget.ListView>.OnLayout at C:\Projects\Maui\src\Compatibility\Core\src\Android\ViewRenderer.cs:194,4 C#
    0x9 in Microsoft.Maui.Controls.Compatibility.Platform.Android.ListViewRenderer.OnLayout at C:\Projects\Maui\src\Compatibility\Core\src\Android\Renderers\ListViewRenderer.cs:253,4  C#
    0x13 in Microsoft.Maui.Controls.Compatibility.FormsViewGroup.n_OnLayout_ZIIII at C:\Projects\Maui\src\Compatibility\Android.FormsViewGroup\src\obj\Debug\net6.0-android\generated\src\Microsoft.Maui.Controls.Compatibility.FormsViewGroup.cs:206,4 C#
    0x2F in Android.Runtime.DynamicMethodNameCounter.55 C#
    0x39 in Java.Interop.NativeMethods.java_interop_jnienv_call_nonvirtual_void_method_a    C#
    0x79 in Java.Interop.JniEnvironment.InstanceMethods.CallNonvirtualVoidMethod at /Users/builder/azdo/_work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop/JniEnvironment.g.cs:12079,4   C#
    0x21 in Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeNonvirtualVoidMethod at /Users/builder/azdo/_work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop/JniPeerMembers.JniInstanceMethods_Invoke.cs:46,5 C#
    0x69 in Android.Views.ViewGroup.Layout at /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/obj/Release/net6.0/android-31/mcw/Android.Views.ViewGroup.cs:3556,5    C#
    0xB2 in Microsoft.Maui.Handlers.ViewHandler<Microsoft.Maui.IView,Android.Views.View>.NativeArrange at C:\Projects\Maui\src\Core\src\Handlers\View\ViewHandlerOfT.Android.cs:43,4    C#
    0x39 in Microsoft.Maui.Controls.Compatibility.RendererToHandlerShim.NativeArrange at C:\Projects\Maui\src\Compatibility\Core\src\RendererToHandlerShim.Android.cs:49,4  C#
    0x21 in Microsoft.Maui.Controls.VisualElement.ArrangeOverride at C:\Projects\Maui\src\Controls\src\Core\HandlerImpl\VisualElement\VisualElement.Impl.cs:89,4    C#
    0x3 in Microsoft.Maui.Controls.VisualElement.Microsoft.Maui.IView.Arrange at C:\Projects\Maui\src\Controls\src\Core\HandlerImpl\VisualElement\VisualElement.Impl.cs:81,4    C#
    0x62 in Microsoft.Maui.Layouts.LayoutExtensions.ArrangeContent at C:\Projects\Maui\src\Core\src\Layouts\LayoutExtensions.cs:165,4   C#
    0x3 in Microsoft.Maui.Controls.ContentPage.Microsoft.Maui.IContentView.CrossPlatformArrange at C:\Projects\Maui\src\Controls\src\Core\HandlerImpl\ContentPage.Impl.cs:33,4  C#
    0x7F in Microsoft.Maui.Handlers.ContentViewGroup.OnLayout at C:\Projects\Maui\src\Core\src\Platform\Android\ContentViewGroup.cs:72,4    C#
    0x10 in Android.Views.ViewGroup.n_OnLayout_ZIIII at /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/obj/Release/net6.0/android-31/mcw/Android.Views.ViewGroup.cs:3880,4  C#
    0x2F in Android.Runtime.DynamicMethodNameCounter.51 C#

Steps to Reproduce

Run the Essentials sample app on Android.

Version with bug

Preview 11

Last version that worked well

Unknown/Other

Affected platforms

Android

Affected platform versions

30

Did you find any workaround?

No response

Relevant log output

No response

mattleibow commented 2 years ago

Just a note on iOS, I got these warnings:

[0:] Element: Microsoft.Maui.Controls.ListView is already a child of Microsoft.Maui.Controls.StackLayout. Remove Microsoft.Maui.Controls.ListView from Microsoft.Maui.Controls.StackLayout before adding to Microsoft.Maui.Controls.GridLayout.
[0:] Element: Microsoft.Maui.Controls.ListView is already a child of Microsoft.Maui.Controls.GridLayout. Remove Microsoft.Maui.Controls.ListView from Microsoft.Maui.Controls.GridLayout before adding to Microsoft.Maui.Controls.GridLayout.
[0:] Element: Microsoft.Maui.Controls.ListView is already a child of Microsoft.Maui.Controls.GridLayout. Remove Microsoft.Maui.Controls.ListView from Microsoft.Maui.Controls.GridLayout before adding to Microsoft.Maui.Controls.GridLayout.
[0:] Element: Microsoft.Maui.Controls.ListView is already a child of Microsoft.Maui.Controls.GridLayout. Remove Microsoft.Maui.Controls.ListView from Microsoft.Maui.Controls.GridLayout before adding to Microsoft.Maui.Controls.GridLayout.
v-longmin commented 2 years ago

@mattleibow Could you share your repro project, thanks?

ghost commented 2 years ago

Hi @mattleibow. We have added the "s/needs-info" label to this issue, which indicates that we have an open question for you before we can take further action. This issue will be closed automatically in 7 days if we do not hear back from you by then - please feel free to re-open it if you come back to this issue after that time.

ghost commented 2 years ago

This issue has been automatically marked as stale because it has been marked as requiring author feedback but has not had any activity for 4 days. It will be closed if no further activity occurs within 3 days of this comment. If it is closed, feel free to comment when you are able to provide the additional information and we will re-investigate.