Xamarin.forms: [Bug] [Android] [CollectionView] [SwipeView]

Created on 23 Feb 2020  ·  5Comments  ·  Source: xamarin/Xamarin.Forms

Description

When using SwipeView in a CollectionView it crashs on Android 9.0 (Emulator) throwing System.Reflection.TargetInvocationException.

I've tested different layouts. Setting LeftItems on SwipeView does not have any effects. When using default linear layout without swipe view CollectionView is working as expected.

Steps to Reproduce

  1. My Navigation Stack when issue occures:
    /NavigationPage/ContentPage/TabbedPage/

TappedPage has two pages, one of Child-Pages looks like this:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             xmlns:prism="http://prismlibrary.com"
             xmlns:viewModels="clr-namespace:Rapport.ViewModels;assembly=Rapport"
             xmlns:models="clr-namespace:Rapport.Data.Models;assembly=Rapport.Data"
             prism:ViewModelLocator.AutowireViewModel="True"
             Title="{Binding Title}"
             Padding="5"
             x:Class="Rapport.Views.OverviewPage">

    <d:ContentPage.BindingContext>
        <viewModels:OverviewPageViewModel />
    </d:ContentPage.BindingContext>

    <ContentPage.Resources>
        <ResourceDictionary>
            <Style TargetType="Label">
                <Setter Property="TextColor" Value="{StaticResource SecondaryTextColor}" />
            </Style>
        </ResourceDictionary>
    </ContentPage.Resources>

    <RefreshView IsRefreshing="{Binding IsRefreshing}" Command="{Binding RefreshCommand}">
        <CollectionView ItemsSource="{Binding TrackedIssues}">
            <CollectionView.ItemsLayout>
                <LinearItemsLayout Orientation="Vertical" ItemSpacing="5"/>
            </CollectionView.ItemsLayout>
            <CollectionView.ItemTemplate>
                <DataTemplate x:DataType="models:IssueModel">
                    <SwipeView>
                        <Label Text="Hello World" />
                    </SwipeView>
                </DataTemplate>
            </CollectionView.ItemTemplate>
        </CollectionView>
    </RefreshView>

</ContentPage>
  1. Run Emulator from within Visual Studio 2019
  2. Crash

Expected Behavior

View working as expected, showing Collection View

Actual Behavior

Before Page is visible, Exception is thrown and App crashes.

StackTrace:
System.Reflection.TargetInvocationException
Message=Exception has been thrown by the target of an invocation.

0xFFFFFFFFFFFFFFFF in System.Diagnostics.Debugger.Mono_UnhandledException_internal  C#
0x1 in System.Diagnostics.Debugger.Mono_UnhandledException at /Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/corlib/System.Diagnostics/Debugger.cs:120,4   C#
0x2C in Android.Runtime.DynamicMethodNameCounter.89 C#
0x22B in System.RuntimeType.CreateInstanceImpl at /Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/referencesource/mscorlib/system/rttype.cs:5535,17 C#
0xBE in System.Activator.CreateInstance at /Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/referencesource/mscorlib/system/activator.cs:107,13  C#
0xA in System.Activator.CreateInstance at /Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/referencesource/mscorlib/system/activator.cs:112,13   C#
0xB6 in Xamarin.Forms.Internals.DependencyResolver.ResolveOrCreate at d:\a\1\s\Xamarin.Forms.Core\DependencyResolver.cs:58,6    C#
0x62 in Xamarin.Forms.Internals.Registrar<Xamarin.Forms.IRegisterable>.GetHandler at d:\a\1\s\Xamarin.Forms.Core\Registrar.cs:90,4  C#
0x42 in Xamarin.Forms.Internals.Registrar<Xamarin.Forms.IRegisterable>.GetHandlerForObject<Xamarin.Forms.Platform.Android.IVisualElementRenderer> at d:\a\1\s\Xamarin.Forms.Core\Registrar.cs:122,4 C#
0x10 in Xamarin.Forms.Platform.Android.Platform.CreateRenderer at d:\a\1\s\Xamarin.Forms.Platform.Android\Platform.cs:347,4 C#
0x2 in Xamarin.Forms.Platform.Android.ItemContentView.CreateRenderer at d:\a\1\s\Xamarin.Forms.Platform.Android\CollectionView\ItemContentView.cs:120,4 C#
0x8 in Xamarin.Forms.Platform.Android.ItemContentView.RealizeContent at d:\a\1\s\Xamarin.Forms.Platform.Android\CollectionView\ItemContentView.cs:19,4  C#
0x51 in Xamarin.Forms.Platform.Android.TemplatedItemViewHolder.Bind at d:\a\1\s\Xamarin.Forms.Platform.Android\CollectionView\TemplatedItemViewHolder.cs:61,5   C#
0x17 in Xamarin.Forms.Platform.Android.ItemsViewAdapter<Xamarin.Forms.GroupableItemsView,Xamarin.Forms.Platform.Android.IGroupableItemsViewSource>.BindTemplatedItemViewHolder at d:\a\1\s\Xamarin.Forms.Platform.Android\CollectionView\ItemsViewAdapter.cs:134,4  C#
0x3B in Xamarin.Forms.Platform.Android.StructuredItemsViewAdapter<Xamarin.Forms.GroupableItemsView,Xamarin.Forms.Platform.Android.IGroupableItemsViewSource>.BindTemplatedItemViewHolder at d:\a\1\s\Xamarin.Forms.Platform.Android\CollectionView\StructuredItemsViewAdapter.cs:108,5  C#
0x4C in Xamarin.Forms.Platform.Android.ItemsViewAdapter<Xamarin.Forms.GroupableItemsView,Xamarin.Forms.Platform.Android.IGroupableItemsViewSource>.OnBindViewHolder at d:\a\1\s\Xamarin.Forms.Platform.Android\CollectionView\ItemsViewAdapter.cs:78,6  C#
0x59 in Xamarin.Forms.Platform.Android.StructuredItemsViewAdapter<Xamarin.Forms.GroupableItemsView,Xamarin.Forms.Platform.Android.IGroupableItemsViewSource>.OnBindViewHolder at d:\a\1\s\Xamarin.Forms.Platform.Android\CollectionView\StructuredItemsViewAdapter.cs:97,4  C#
0x3 in Xamarin.Forms.Platform.Android.SelectableItemsViewAdapter<Xamarin.Forms.GroupableItemsView,Xamarin.Forms.Platform.Android.IGroupableItemsViewSource>.OnBindViewHolder at d:\a\1\s\Xamarin.Forms.Platform.Android\CollectionView\SelectableItemsViewAdapter.cs:27,4   C#
0x4E in Xamarin.Forms.Platform.Android.GroupableItemsViewAdapter<Xamarin.Forms.GroupableItemsView,Xamarin.Forms.Platform.Android.IGroupableItemsViewSource>.OnBindViewHolder at d:\a\1\s\Xamarin.Forms.Platform.Android\CollectionView\GroupableItemsViewAdapter.cs:69,4    C#
0x12 in Android.Support.V7.Widget.RecyclerView.Adapter.n_OnBindViewHolder_Landroid_support_v7_widget_RecyclerView_ViewHolder_I  C#
0x1D in Android.Runtime.DynamicMethodNameCounter.89 C#
0xFFFFFFFFFFFFFFFF in Java.Interop.NativeMethods.java_interop_jnienv_call_nonvirtual_void_method_a  C#
0x79 in Java.Interop.JniEnvironment.InstanceMethods.CallNonvirtualVoidMethod    C#
0x5F in Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeVirtualVoidMethod  C#
0x80 in Android.Support.V7.Widget.RecyclerView.OnLayout C#
0x8 in Xamarin.Forms.Platform.Android.ItemsViewRenderer<Xamarin.Forms.GroupableItemsView,Xamarin.Forms.Platform.Android.GroupableItemsViewAdapter<Xamarin.Forms.GroupableItemsView,Xamarin.Forms.Platform.Android.IGroupableItemsViewSource>,Xamarin.Forms.Platform.Android.IGroupableItemsViewSource>.OnLayout at d:\a\1\s\Xamarin.Forms.Platform.Android\CollectionView\ItemsViewRenderer.cs:65,4 C#
0x10 in Android.Support.V7.Widget.RecyclerView.n_OnLayout_ZIIII C#
0x2F in Android.Runtime.DynamicMethodNameCounter.81 C#
0xFFFFFFFFFFFFFFFF in Java.Interop.NativeMethods.java_interop_jnienv_call_nonvirtual_void_method_a  C#
0x79 in Java.Interop.JniEnvironment.InstanceMethods.CallNonvirtualVoidMethod    C#
0x21 in Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeNonvirtualVoidMethod   C#
0x69 in Android.Views.ViewGroup.Layout  C#
0x118 in Xamarin.Forms.Platform.Android.VisualElementTracker.UpdateLayout at d:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementTracker.cs:91,5   C#
0xB in Xamarin.Forms.Platform.Android.RefreshViewRenderer.UpdateLayout at d:\a\1\s\Xamarin.Forms.Platform.Android\Renderers\RefreshViewRenderer.cs:220,33   C#
0x3A in Xamarin.Forms.Platform.Android.VisualElementRenderer<Xamarin.Forms.Page>.UpdateLayout at d:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:397,5 C#
0x1E in Xamarin.Forms.Platform.Android.VisualElementRenderer<Xamarin.Forms.Page>.OnLayout at d:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:382,4 C#
0x8 in Xamarin.Forms.Platform.Android.PageRenderer.OnLayout at d:\a\1\s\Xamarin.Forms.Platform.Android\Renderers\PageRenderer.cs:226,4  C#
0x10 in Xamarin.Forms.Platform.Android.FormsViewGroup.n_OnLayout_ZIIII at d:\a\1\s\Xamarin.Forms.Platform.Android.FormsViewGroup\obj\Release\generated\src\Xamarin.Forms.Platform.Android.FormsViewGroup.cs:198,4   C#
0x2F in Android.Runtime.DynamicMethodNameCounter.31 C#
0xFFFFFFFFFFFFFFFF in Java.Interop.NativeMethods.java_interop_jnienv_call_nonvirtual_void_method_a  C#
0x79 in Java.Interop.JniEnvironment.InstanceMethods.CallNonvirtualVoidMethod    C#
0x5F in Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeVirtualVoidMethod  C#
0x97 in Xamarin.Forms.Platform.Android.FormsViewGroup.MeasureAndLayout at d:\a\1\s\Xamarin.Forms.Platform.Android.FormsViewGroup\obj\Release\generated\src\Xamarin.Forms.Platform.Android.FormsViewGroup.cs:181,5   C#
0x171 in Xamarin.Forms.Platform.Android.VisualElementTracker.UpdateLayout at d:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementTracker.cs:97,5   C#
0x1E in Xamarin.Forms.Platform.Android.VisualElementRenderer<Xamarin.Forms.Page>.UpdateLayout at d:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:141,4 C#
0x6 in Xamarin.Forms.Platform.Android.PageContainer.OnLayout at d:\a\1\s\Xamarin.Forms.Platform.Android\Renderers\PageContainer.cs:30,4 C#
0x12 in Android.Views.ViewGroup.n_OnLayout_ZIIII    C#
0x2F in Android.Runtime.DynamicMethodNameCounter.26 C#
0xFFFFFFFFFFFFFFFF in Java.Interop.NativeMethods.java_interop_jnienv_call_nonvirtual_void_method_a  C#
0x79 in Java.Interop.JniEnvironment.InstanceMethods.CallNonvirtualVoidMethod    C#
0x21 in Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeNonvirtualVoidMethod   C#
0x69 in Android.Views.ViewGroup.Layout  C#
0xCD in Xamarin.Forms.Platform.Android.AppCompat.TabbedPageRenderer.OnLayout at d:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\TabbedPageRenderer.cs:413,6   C#
0x10 in Xamarin.Forms.Platform.Android.FormsViewGroup.n_OnLayout_ZIIII at d:\a\1\s\Xamarin.Forms.Platform.Android.FormsViewGroup\obj\Release\generated\src\Xamarin.Forms.Platform.Android.FormsViewGroup.cs:198,4   C#
0x2F in Android.Runtime.DynamicMethodNameCounter.31 C#
0xFFFFFFFFFFFFFFFF in Java.Interop.NativeMethods.java_interop_jnienv_call_nonvirtual_void_method_a  C#
0x79 in Java.Interop.JniEnvironment.InstanceMethods.CallNonvirtualVoidMethod    C#
0x5F in Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeVirtualVoidMethod  C#
0x97 in Xamarin.Forms.Platform.Android.FormsViewGroup.MeasureAndLayout at d:\a\1\s\Xamarin.Forms.Platform.Android.FormsViewGroup\obj\Release\generated\src\Xamarin.Forms.Platform.Android.FormsViewGroup.cs:181,5   C#
0x171 in Xamarin.Forms.Platform.Android.VisualElementTracker.UpdateLayout at d:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementTracker.cs:97,5   C#
0x1E in Xamarin.Forms.Platform.Android.VisualElementRenderer<Xamarin.Forms.TabbedPage>.UpdateLayout at d:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:141,4   C#
0x3A in Xamarin.Forms.Platform.Android.VisualElementRenderer<Xamarin.Forms.NavigationPage>.UpdateLayout at d:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:397,5   C#
0x1E in Xamarin.Forms.Platform.Android.VisualElementRenderer<Xamarin.Forms.NavigationPage>.OnLayout at d:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:382,4   C#
0x15 in Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer.OnLayout at d:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\NavigationPageRenderer.cs:409,4   C#
0x10 in Xamarin.Forms.Platform.Android.FormsViewGroup.n_OnLayout_ZIIII at d:\a\1\s\Xamarin.Forms.Platform.Android.FormsViewGroup\obj\Release\generated\src\Xamarin.Forms.Platform.Android.FormsViewGroup.cs:198,4   C#
0x2F in Android.Runtime.DynamicMethodNameCounter.31 C#
0xFFFFFFFFFFFFFFFF in Java.Interop.NativeMethods.java_interop_jnienv_call_nonvirtual_void_method_a  C#
0x79 in Java.Interop.JniEnvironment.InstanceMethods.CallNonvirtualVoidMethod    C#
0x5F in Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeVirtualVoidMethod  C#
0x97 in Xamarin.Forms.Platform.Android.FormsViewGroup.MeasureAndLayout at d:\a\1\s\Xamarin.Forms.Platform.Android.FormsViewGroup\obj\Release\generated\src\Xamarin.Forms.Platform.Android.FormsViewGroup.cs:181,5   C#
0x171 in Xamarin.Forms.Platform.Android.VisualElementTracker.UpdateLayout at d:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementTracker.cs:97,5   C#
0x1E in Xamarin.Forms.Platform.Android.VisualElementRenderer<Xamarin.Forms.NavigationPage>.UpdateLayout at d:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:141,4   C#
0x2B in Xamarin.Forms.Platform.Android.AppCompat.Platform.Xamarin.Forms.Platform.Android.IPlatformLayout.OnLayout at d:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\Platform.cs:234,4    C#
0x2D in Xamarin.Forms.Platform.Android.PlatformRenderer.OnLayout at d:\a\1\s\Xamarin.Forms.Platform.Android\PlatformRenderer.cs:75,4    C#
0x12 in Android.Views.ViewGroup.n_OnLayout_ZIIII    C#
0x2F in Android.Runtime.DynamicMethodNameCounter.26 C#

Basic Information

  • Version with issue: Xamarin.Forms 4.5.0.282-pre4
  • Last known good version: -
  • IDE: VS 2019 Enterprise
  • Platform Target Frameworks:

    • Android: Min: 5.1, Target: 10.0. Emulator running Android 9.0

  • Android Support Library Version: 28.0.0.3, AndroidX not tested
  • Affected Devices: Emulator
swipeview Android needs-repro ❔ unverified bug

All 5 comments

Similar thing happening to me when adding a SwipeView in a CollectionView.

the worst thing is that these kind of errors are not correlated to any code line, and you cannot see any exception detail / inner exception:

image

here the last lines of the output:

02-24 13:23:37.850 I/OpenGLRenderer(16579): Initialized EGL, version 1.4
02-24 13:23:37.850 D/OpenGLRenderer(16579): Swap behavior 1
02-24 13:23:37.850 W/OpenGLRenderer(16579): Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
02-24 13:23:37.850 D/OpenGLRenderer(16579): Swap behavior 0
02-24 13:23:37.917 D/EGL_emulation(16579): eglCreateContext: 0xc1008000: maj 2 min 0 rcv 2
02-24 13:23:37.961 D/EGL_emulation(16579): eglMakeCurrent: 0xc1008000: ver 2 0 (tinfo 0xc100b7b0)
02-24 13:23:38.130 W/yname.pickycat(16579): JNI RegisterNativeMethods: attempt to register 0 native methods for crc643f46942d9dd1fff9.TemplatedItemViewHolder
02-24 13:23:38.249 W/yname.pickycat(16579): JNI RegisterNativeMethods: attempt to register 0 native methods for crc643f46942d9dd1fff9.FormsTextView
02-24 13:23:38.358 D/Mono    (16579): DllImport searching in: '__Internal' ('(null)').
02-24 13:23:38.358 D/Mono    (16579): Searching for 'java_interop_jnienv_get_object_field'.
02-24 13:23:38.358 D/Mono    (16579): Probing 'java_interop_jnienv_get_object_field'.
02-24 13:23:38.358 D/Mono    (16579): Found as 'java_interop_jnienv_get_object_field'.
02-24 13:23:38.546 W/yname.pickycat(16579): JNI RegisterNativeMethods: attempt to register 0 native methods for crc643f46942d9dd1fff9.SimpleViewHolder
**System.Reflection.TargetInvocationException:** 'Exception has been thrown by the target of an invocation.'

02-24 13:23:40.090 I/yname.pickycat(16579): Explicit concurrent copying GC freed 1681(111KB) AllocSpace objects, 0(0B) LOS objects, 50% free, 1957KB/3MB, paused 324us total 8.995ms
02-24 13:23:40.096 D/Mono    (16579): GC_TAR_BRIDGE bridges 383 objects 5897 opaque 1962 colors 383 colors-bridged 383 colors-visible 383 xref 19 cache-hit 0 cache-semihit 0 cache-miss 0 setup 0.02ms tarjan 1.20ms scc-setup 0.08ms gather-xref 0.05ms xref-setup 0.01ms cleanup 2.58ms
02-24 13:23:40.097 D/Mono    (16579): GC_BRIDGE: Complete, was running for 16.04ms
02-24 13:23:40.097 D/Mono    (16579): GC_MINOR: (Nursery full) time 7.21ms, stw 8.33ms promoted 1284K major size: 2752K in use: 1962K los size: 1024K in use: 632K

I have been testing trying to reproduce the problem, but without success.
Captura de pantalla 2020-02-25 a las 9 57 05

Attached can find the created example.

Issue9683.zip

@nschoenberg Could you check it to see if something is missing?

I just remembered, SwipeView is in Preview and to use it you have to use the experimental flag:

Forms.SetFlags("SwipeView_Experimental");

Uh wow, my fault. Classic RTFM Issue.

Can confirm Forms.SetFlags("SwipeView_Experimental"); in MainActivity solved my issue. Even SwipeView.LeftItems is working now, but hard to handle in TabView because it can happen that user accidentally navigates to another TabItem when opening SwipeView.

@jsuarezruiz This can be closed. But maybe improve Exception to make it more "idiot"proof.

pic

Yeah, I had the flag, but I was setting incorrectly:
instead of:

global::Xamarin.Forms.Forms.SetFlags(
     "CollectionView_Experimental",
     "SwipeView_Experimental");

I was doing:

global::Xamarin.Forms.Forms.SetFlags("CollectionView_Experimental");
global::Xamarin.Forms.Forms.SetFlags("SwipeView_Experimental");

I agree with @nschoenberg that we should open a new one for the very bad exception message: the fact that the exception is not associated to any line of code makes very hard to pinpoint the issue.

Was this page helpful?
0 / 5 - 0 ratings