Spa*_*key 1 android xamarin xamarin-forms
在我的应用程序中,我用FormsAppCompatActivity替换了AndroidActivity.
现在在扩展NavigationRenderer的自定义渲染器中,我得到了一个跟踪方法Xamarin.Forms.Platform.Android.NavigationRenderer.SwitchContentAsync的异常:
[MonoDroid] UNHANDLED EXCEPTION:
[MonoDroid] System.InvalidCastException: Cannot cast from source type to destination type.
[MonoDroid] at Xamarin.Forms.Platform.Android.NavigationRenderer.SwitchContentAsync (Xamarin.Forms.Page,bool,bool) <IL 0x000bd, 0x003fe>
[MonoDroid] at Xamarin.Forms.Platform.Android.NavigationRenderer.OnPushAsync (Xamarin.Forms.Page,bool) <IL 0x00004, 0x0003f>
[MonoDroid] at Xamarin.Forms.Platform.Android.NavigationRenderer.PushViewAsync (Xamarin.Forms.Page,bool) <IL 0x00003, 0x00036>
[MonoDroid] at Xamarin.Forms.Platform.Android.NavigationRenderer.<OnElementChanged>b__4_0 (Xamarin.Forms.Page) <IL 0x00003, 0x00033>
[MonoDroid] at Xamarin.Forms.EnumerableExtensions.ForEach<Xamarin.Forms.Page> (System.Collections.Generic.IEnumerable`1<Xamarin.Forms.Page>,System.Action`1<Xamarin.Forms.Page>) <0x000bf>
[MonoDroid] at Xamarin.Forms.Platform.Android.NavigationRenderer.OnElementChanged (Xamarin.Forms.Platform.Android.ElementChangedEventArgs`1<Xamarin.Forms.NavigationPage>) <IL 0x000ea, 0x006ff>
[MonoDroid] at Boats.Droid.PageFancyRenderer.OnElementChanged (Xamarin.Forms.Platform.Android.ElementChangedEventArgs`1<Xamarin.Forms.NavigationPage>) [0x00001] in d:\Code\Boats\Droid\Renderers\NavigationPageFancy.cs:33
Run Code Online (Sandbox Code Playgroud)
我不能介入它,因为我没有Xamarin.Forms的源代码.这个方法的反编译就在这里
有任何想法吗?
Spa*_*key 11
这是因为AppCompat引入了一个新的NavigationRenderer,所以我应该继承它而不是Xamarin.Forms.Platform.Android中的那个.
所以,解决方案是:
public class PageFancyRenderer : Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer
Run Code Online (Sandbox Code Playgroud)
代替:
public class PageFancyRenderer : Xamarin.Forms.Platform.Android.NavigationPageRenderer
Run Code Online (Sandbox Code Playgroud)
为什么会出现这种错误:
在NavigationPageRenderer.SwitchContentAsync里面有这一行:
((Platform) this.Element.Platform).NavAnimationInProgress = false;
Run Code Online (Sandbox Code Playgroud)
由于我是Android.NavigationRenderer的子类,因此正在对Android.Platform类进行强制转换
正确的渲染器Android.AppCompat.NavigationRenderer将转换为元素的正确平台(使用AppCompatActivity时),即Android.AppCompat.Platform
如果Xamarin.Forms是开源的,那么这将更容易捕获,因为我能够实际调试代码,但相反,我必须查看IL反汇编以找到导致错误的行.
请为社区开源Xamarin.Forms
| 归档时间: |
|
| 查看次数: |
1469 次 |
| 最近记录: |