异常情况:System.ArgumentException:元素必须为Button类型Xamarin.Forms-Android

问题描述

将Xamarin.Forms更新到4.7.0.968版本后,我得到了这个异常

堆栈跟踪:

[MonoDroid] UNHANDLED EXCEPTION:
[MonoDroid] System.ArgumentException: element must be of type Button
[MonoDroid]   at Xamarin.Forms.Platform.Android.RadioButtonRenderer.Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00016] in D:\a\1\s\Xamarin.Forms.Platform.Android\AppCompat\RadioButtonRenderer.cs:102 
[MonoDroid]   at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element,Android.Content.Context context) [0x0001f] in D:\a\1\s\Xamarin.Forms.Platform.Android\Platform.cs:350 
[MonoDroid]   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) [0x000b3] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:140 
[MonoDroid]   at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement,Xamarin.Forms.VisualElement newElement) [0x00163] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:351 
[MonoDroid]   at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:112 
[MonoDroid]   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:465 
[MonoDroid]   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetElement (TElement element) [0x000d5] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:245 
[MonoDroid]   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00033] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:135 
[MonoDroid]   at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element,System.Boolean sameChildren) [0x000b3] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:140 
[MonoDroid]   at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:112 
[MonoDroi10-16 12:32:01.021 I]   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:465 
[MonoDroid]   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetElement (TElement element) [0x000d5] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:245 
[MonoDroid]   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00033] in D:\a\1\s\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:135 
[MonoDroid]   at Xamarin.Forms.Platform.Android.ViewCellRenderer.GetCellCore (Xamarin.Forms.Cell item,Android.Views.View convertView,Android.Views.ViewGroup parent,Android.Content.Context context) [0x000a4] in D:\a\1\s\Xamarin.Forms.Platform.Android\Cells\ViewCellRenderer.cs:44 
[MonoDroid]   at Xamarin.Forms.Platform.Android.CellRenderer.GetCell (Xamarin.Forms.Cell item,Android.Content.Context context) [0x00075] in D:\a\1\s\Xamarin.Forms.Platform.Android\Cells\CellRenderer.cs:51 
[MonoDroid]   at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement,Xamarin.Forms.VisualElement newElement) [0x00163] in D:\a\1\s\Xamarin.Forparent,Android.Content.Context context,Xamarin.Forms.View view) [0x0001e] in D:\a\1\s\Xamarin.Forms.Platform.Android\Cells\CellFactory.cs:20 
[MonoDroid]   at Xamarin.Forms.Platform.Android.ListViewAdapter.GetView (system.int32 position,Android.Views.ViewGroup parent) [0x00211] in D:\a\1\s\Xamarin.Forms.Platform.Android\Renderers\ListViewAdapter.cs:304 
[MonoDroid]   at Android.Widget.BaseAdapter.n_GetView_ILandroid_view_View_Landroid_view_ViewGroup_ (system.intPtr jnienv,system.intPtr native__this,system.int32 position,system.intPtr native_convertView,system.intPtr native_parent) [0x00019] in /Users/builder/azdo/_work/287/s/xamarin-android/src/Mono.Android/obj/Release/monoAndroid10/android-29/mcw/Android.Widget.BaseAdapter.cs:521 
[MonoDroid]   at (wrapper dynamic-method) Android.Runtime.DynamicmethodNameCounter.124(intptr,intptr,int,intptr)
[Mono] Probing 'java_interop_jnienv_throw'.
[Mono] Found as 'java_interop_jnienv_throw'.

我在GitHub上报告了错误Check Bug

有人知道如何处理此异常或解决此问题吗?

解决方法

您是否将“自定义”渲染器用于“单选”按钮?可能是个问题

,

感谢@GeraldVersluis为我在GitHub上报告的bug的答案提供了解决方案。解决方法如下:

啊,您根本不使用内置的RadioButton吗?您创建了自己的?可能是一些命名冲突。我将RadioButtonRenderer重命名为CustomRadioButtonRenderer,看看效果是否更好。这是因为Xamarin。表单现在也具有RadioButton。

然后我按照他的建议将我的Renderer名称更改为 CustomRadioButtonRenderer ,此后它开始正常工作。