【问题标题】:Xamarin WebViewRenderer.OnElementChanged gets called with null native controll on Xamarin Forms 2.5Xamarin WebViewRenderer.OnElementChanged 在 Xamarin Forms 2.5 上使用 null 本机控件调用
【发布时间】:2018-03-21 12:39:33
【问题描述】:

我正在为 Webviews 使用我自己的 customrenderer,它一直有效,但是自从我将 Xamarin Forms nuget 包升级到 2.5 版后,它崩溃了,因为似乎使用 null 本机控件和 null thisActivity 调用了成员方法 OnElementChanged。知道如何解决吗?

这是我得到的错误:

Unhandled Exception:

System.ArgumentNullException: Value cannot be null.
Parameter name: thisActivity

【问题讨论】:

  • 您确定在设置了这些值的情况下不久之后不会再次调用 OnElementChanged 吗?然后你可能会检查 null 并且当它为 null 时什么也不做。就像用他们自己的渲染器完成的一样? github.com/xamarin/Xamarin.Forms/blob/master/…
  • @J.Vergeer 不,它不是只调用一次 OnElementChanged 并且在该调用中,一旦我调用 base.OnElementChanged() 就会出现异常
  • 同时清理你的解决方案,删除项目的 obj 和 bin 文件夹,重启 vs/xamarin 工作室,添加 @Shaegorath 给的 ctor
  • @Csharpest 是的,清洁和所有这些东西都没有帮助,顺便说一句,我是 Shaegorath :D
  • 哦,是的,哈哈,我没有注意到 :D 那么您自己提供的答案是否解决了您的问题?你是这样标记的

标签: xamarin xamarin.forms xamarin.android


【解决方案1】:

我通过添加一个构造函数来修复此崩溃,该构造函数采用 Androd.Content.Context 并将其传递给包含我的自定义 WebViewRenderer 的自定义 PageRenderer 中的基类。将新的构造函数添加到 webview 本身并没有帮助。

public class BaseControllerRenderer : Xamarin.Forms.Platform.Android.PageRenderer
{
    public BaseControllerRenderer(Context context) : base(context)
    {

    }
...

【讨论】:

    【解决方案2】:

    来自Xamarin.Forms 2.5 release notes

    WebViewRenderer:此构造函数在 2.5 版中已过时。请改用 WebViewRenderer(Context)。

    WebView 自定义渲染器和 OnElementChanged 的​​示例构造函数:

    public CustomWebViewRenderer(Context context) : base(context)
    {
      Activity activity = (Activity)context;
    }
    
    protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
    {
      base.OnElementChanged(e);
    
      if (Control != null)
      {
        Android.Webkit.WebView webView = Control;
      }
    }
    

    另见WebViewRenderer

    编辑:请注意,构造函数更改适用于Xamarin.Forms 2.5 release notes中所述的任何Android自定义渲染器:

    支持表单嵌入需要在 Android 后端进行大量弃用。请更新任何自定义渲染器。

    【讨论】:

    • 你确定它有效吗?我知道构造函数中的这个新变化,我尝试像上面那样添加新构造函数并将上下文传递给基类,但我仍然在 base.OnElementChanged(e);
    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多