1iveowl / Plugin.SegmentedControl

MIT License
171 stars 29 forks source link

InvalidCastException on Android #7

Closed guyeeba closed 6 years ago

guyeeba commented 6 years ago

Hi,

I receive an InvalidCastException on Android (UWP and iOS builds work fine).

Both Emulator (6.0.0) and physical device (7.0) is affected. Latest Xamarin.Forms, Visual Studio, everything.

Stack trace:

11-01 12:06:45.574 I/MonoDroid( 5825): System.InvalidCastException: Specified cast is not valid.
11-01 12:06:45.574 I/MonoDroid( 5825):   at Plugin.Segmented.Control.Droid.SegmentedControlRenderer.Element_SizeChanged (System.Object sender, System.EventArgs e) [0x00021] in V:\GitHub\Plugin.SegmentedControl\src\crossplatform\SegCtrl.Droid\SegmentedControlRenderer.cs:54 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Plugin.Segmented.Control.Droid.SegmentedControlRenderer.OnElementPropertyChanged (System.Object sender, System.ComponentModel.PropertyChangedEventArgs e) [0x0005a] in V:\GitHub\Plugin.SegmentedControl\src\crossplatform\SegCtrl.Droid\SegmentedControlRenderer.cs:92 
11-01 12:06:45.574 I/MonoDroid( 5825):   at (wrapper delegate-invoke) <Module>:invoke_void_object_PropertyChangedEventArgs (object,System.ComponentModel.PropertyChangedEventArgs)
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.BindableObject.OnPropertyChanged (System.String propertyName) [0x0000a] in D:\agent\_work\1\s\Xamarin.Forms.Core\BindableObject.cs:137 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.Element.OnPropertyChanged (System.String propertyName) [0x00000] in D:\agent\_work\1\s\Xamarin.Forms.Core\Element.cs:388 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.BindableObject.SetValueActual (Xamarin.Forms.BindableProperty property, Xamarin.Forms.BindableObject+BindablePropertyContext context, System.Object value, System.Boolean currentlyApplying, Xamarin.Forms.Internals.SetValueFlags attributes, System.Boolean silent) [0x000f4] in D:\agent\_work\1\s\Xamarin.Forms.Core\BindableObject.cs:593 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.BindableObject.SetValueCore (Xamarin.Forms.BindableProperty property, System.Object value, Xamarin.Forms.Internals.SetValueFlags attributes, Xamarin.Forms.BindableObject+SetValuePrivateFlags privateAttributes) [0x0015b] in D:\agent\_work\1\s\Xamarin.Forms.Core\BindableObject.cs:390 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.BindableObject.SetValue (Xamarin.Forms.BindableProperty property, System.Object value, System.Boolean fromStyle, System.Boolean checkAccess) [0x0005f] in D:\agent\_work\1\s\Xamarin.Forms.Core\BindableObject.cs:543 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.BindableObject.SetValue (Xamarin.Forms.BindableProperty property, System.Object value) [0x00000] in D:\agent\_work\1\s\Xamarin.Forms.Core\BindableObject.cs:83 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.Platform.Android.Platform.SetRenderer (Xamarin.Forms.VisualElement bindable, Xamarin.Forms.Platform.Android.IVisualElementRenderer value) [0x00000] in D:\agent\_work\1\s\Xamarin.Forms.Platform.Android\Platform.cs:297 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement view, Xamarin.Forms.Platform.Android.IVisualElementRenderer oldRenderer, Xamarin.Forms.Platform.Android.RendererPool pool, System.Boolean sameChildren) [0x00041] in D:\agent\_work\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:97 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x00104] in D:\agent\_work\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:219 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in D:\agent\_work\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:70 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in D:\agent\_work\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:371 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetElement (TElement element) [0x000ce] in D:\agent\_work\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:174 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00027] in D:\agent\_work\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:120 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element) [0x0001f] in D:\agent\_work\1\s\Xamarin.Forms.Platform.Android\Platform.cs:285 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement view, Xamarin.Forms.Platform.Android.IVisualElementRenderer oldRenderer, Xamarin.Forms.Platform.Android.RendererPool pool, System.Boolean sameChildren) [0x00023] in D:\agent\_work\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:86 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x00104] in D:\agent\_work\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:219 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in D:\agent\_work\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:70 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in D:\agent\_work\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:371 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetElement (TElement element) [0x000ce] in D:\agent\_work\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:174 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00027] in D:\agent\_work\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:120 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element, Android.Support.V4.App.FragmentManager fragmentManager) [0x00031] in D:\agent\_work\1\s\Xamarin.Forms.Platform.Android\Platform.cs:322 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Xamarin.Forms.Platform.Android.AppCompat.FragmentContainer.OnCreateView (Android.Views.LayoutInflater inflater, Android.Views.ViewGroup container, Android.OS.Bundle savedInstanceState) [0x00008] in D:\agent\_work\1\s\Xamarin.Forms.Platform.Android\AppCompat\FragmentContainer.cs:67 
11-01 12:06:45.574 I/MonoDroid( 5825):   at Android.Support.V4.App.Fragment.n_OnCreateView_Landroid_view_LayoutInflater_Landroid_view_ViewGroup_Landroid_os_Bundle_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_inflater, System.IntPtr native_container, System.IntPtr native_savedInstanceState) [0x00020] in <575255b84b4942aa8ea338ee45ed50f6>:0 
11-01 12:06:45.574 I/MonoDroid( 5825):   at (wrapper dynamic-method) System.Object:106a00c0-2219-4c41-810c-3d4eb6e8a1f6 (intptr,intptr,intptr,intptr,intptr)

I narrowed the relevant XAML down to this, but I still get the exception:

    <segmentctrl:SegmentedControl
      x:Name="PositionCtrl" 
      Grid.Row="2"
      SelectedTextColor="White"
      Margin="8,8,8,8">
      <segmentctrl:SegmentedControl.Children>
         <segmentctrl:SegmentedControlOption Text="a"/>
         <segmentctrl:SegmentedControlOption Text="b"/>
      </segmentctrl:SegmentedControl.Children>
    </segmentctrl:SegmentedControl>

Thanks!

1iveowl commented 6 years ago

Thank you for the feedback.

Unfortunately I can't reproduce the error. Does it fail if you try and run the Android test included in this GitHub repo?

Any chance you create a small project where you provoke the error and share that with me?

1iveowl commented 6 years ago

I did some changes and released version 1.0.6.

Not sure if it helped, as I'm still not able to reproduce. Let me know if version 1.0.6 made any difference.

Thank you.

guyeeba commented 6 years ago

Well, whatever you did, it helped...

Thanks a lot!

1iveowl commented 6 years ago

I added the latest release of the Android libraries and recompiled. It must have been some error in the Xamarin libraries.

Glad it helped.