【问题标题】:MissingMethodException for custom renderer自定义渲染器的 MissingMethodException
【发布时间】:2018-02-15 08:14:29
【问题描述】:

加载我的 MainPage 时,Visual Studio 进入中断模式并出现以下错误

System.MissingMethodException:找不到类型 Test.Renderers.PostListViewAndroid 的默认构造函数

我更新了我的自定义渲染器类以支持 2.5,因为 从 2.5 版开始,上下文已过时

我的自定义渲染器是

[assembly: ExportRenderer(typeof(PostListView), typeof(PostListViewAndroid))]
namespace SocialNetwork.Droid.Renderers
 {
public class PostListViewAndroid: ListViewRenderer
{

    public PostListViewAndroid(Context context) : base(context)
    {

    }

    protected override void OnElementChanged(ElementChangedEventArgs<ListView> e)
    {
        base.OnElementChanged(e);
        Control.SetSelector(Android.Resource.Color.Transparent);
    }
}
}

而 PostListView 很简单

public class PostListView : ListView
{
}

【问题讨论】:

  • 你能贴出 PostListViewAndroid 类的代码 sn-p 吗?
  • @RahulAgarwal 发布了错误的类:P 现在在编辑中替换。
  • 添加默认构造函数:public PostListViewAndroid(){}
  • @FaizanRabbani 这实际上是有效的,只是它放了一个绿色的 unline 说它在 2.5 版已过时

标签: c# xamarin xamarin.forms xamarin.android


【解决方案1】:

如果您使用 Xamarin.Forms >= 2.5,您需要使用 ListViewRenderer(Context context) : base(context),如您所知

这是当前ListViewRenderer的来源

public class ListViewRenderer : ViewRenderer<ListView, AListView>, SwipeRefreshLayout.IOnRefreshListener
{
    ...

    public ListViewRenderer(Context context) : base(context)
    {
        AutoPackage = false;
    }

    [Obsolete("This constructor is obsolete as of version 2.5. Please use ListViewRenderer(Context) instead.")]
    public ListViewRenderer()
    {
        AutoPackage = false;
    }

注意Obsolete 属性,这意味着您不需要它。但是,您的问题似乎是您的包和引用不对齐。我尝试以下步骤

第 1 步

  1. 清洁解决方案
  2. 删除所有项目中的 bin 和 objs 方向
  3. 重启视觉工作室
  4. 重建

第 2 步

尝试在包包控制台中更新所有包以获取解决方案

Update-Package  –reinstall

在这一步之后,如果仍然没有成功,请再次尝试第 1 步

【讨论】:

    【解决方案2】:

    如果基类没有默认的空构造函数(在您的情况下为ListViewRenderer) - 您不能这样做。如果有,请在下面添加

    public PostListViewAndroid()
        {
    
        }
    

    原因很简单:在实例化派生类时,会调用第一个基类构造函数进行初始化。因此,如果基类中没有默认构造函数,它就不会成功。

    【讨论】:

      【解决方案3】:

      我有一个类似的问题,但我忘记将上下文承包商公开。

      我改变这个:

      PostListViewAndroid(Context context) : base(context)
      

      对此:

      public PostListViewAndroid(Context context) : base(context)
      

      【讨论】:

        猜你喜欢
        • 2017-06-09
        • 2017-11-24
        • 2013-09-25
        • 2011-07-14
        • 1970-01-01
        • 1970-01-01
        • 2016-11-08
        • 1970-01-01
        • 2012-08-25
        相关资源
        最近更新 更多