Xamarin.Forms中自定义VideoView渲染器OnElementChanged方法未执行的问题求助
Xamarin.Forms中自定义VideoView渲染器OnElementChanged方法未执行的问题求助
我最近做了个带VideoView的简单Xamarin.Forms应用,切换应用内的标签页时总会崩溃,报错提示“View is Null”。后来找了个自定义渲染器的解决方案,但把它加到项目里后遇到了新问题——自定义渲染器里的OnElementChanged方法完全没执行,连我加的Console.WriteLine("This will never run");都没输出,我肯定是对自定义渲染器的工作原理理解错了,想请教下各位大佬哪里出问题了。
先贴我的自定义渲染器代码:
using Android.Content; using LibVLCSharp.Shared; using LibVLCSharp.Forms.Platforms.Android; using LibVLCSharp.Forms.Shared; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; using System; [assembly: ExportRenderer(typeof(VideoView), typeof(CustomVideoViewRenderer))] namespace LibVLCSharp.Forms.Platforms.Android { /// <summary> /// Xamarin.Forms custom renderer for the Android VideoView /// </summary> public class CustomVideoViewRenderer : ViewRenderer<LibVLCSharp.Forms.Shared.VideoView, LibVLCSharp.Platforms.Android.VideoView> { /// <summary> /// Main constructor (empty) /// </summary> /// <param name="context">Android context</param> public CustomVideoViewRenderer(Context context) : base(context) { } /// <summary> /// Native control management during lifecycle events /// </summary> /// <param name="e">lifecycle event</param> protected override void OnElementChanged(ElementChangedEventArgs<VideoView> e) { Console.WriteLine("This will never run"); base.OnElementChanged(e); if (e.NewElement != null) { if (Control == null) { SetNativeControl(new LibVLCSharp.Platforms.Android.VideoView(Context!)); e.NewElement.MediaPlayerChanging += OnMediaPlayerChanging; if (Control!.MediaPlayer != e.NewElement.MediaPlayer) { OnMediaPlayerChanging(this, new MediaPlayerChangingEventArgs(Control!.MediaPlayer, e.NewElement.MediaPlayer)); } } } if (e.OldElement != null) { e.OldElement.MediaPlayerChanging -= OnMediaPlayerChanging; } } private void OnMediaPlayerChanging(object? sender, MediaPlayerChangingEventArgs e) { Control.MediaPlayer = e.NewMediaPlayer; Control.TriggerLayoutChangeListener(); } } }
再贴XAML里的使用代码:
<shared:VideoView x:Name="somevid" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Grid.Column="1"></shared:VideoView>
我原本以为自定义渲染器只要继承目标控件对应的渲染器基类,重写OnElementChanged方法,再加上ExportRenderer特性指定要替换的控件和自定义渲染器就会自动生效,但现在连方法都没触发,实在摸不着头脑,求各位大佬指点!
备注:内容来源于stack exchange,提问作者Jeffrey van Dijk
相关产品推荐
相关产品推荐

