自定义渲染器的MissingMethodException

时间:2018-02-15 08:14:30

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

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

  

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

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

我的自定义渲染器是

java -jar <JAR file path>

PostListView就是

[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);
    }
}
}

3 个答案:

答案 0 :(得分:6)

如果您使用的是Xamarin.Forms&gt; = 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. 重新启动visual studio
  4. 重建
  5. 第2步

    尝试在程序包程序包中更新解决方案的所有程序包

    Update-Package  –reinstall
    

    完成此步骤后,如果仍然无效,请再次尝试步骤1

答案 1 :(得分:2)

如果基类没有默认的空构造函数(在您的情况下为ListViewRenderer) - 则无法执行此操作。如果有,请在下面添加

public PostListViewAndroid()
    {

    }

它的原因很简单:在实例化中派生类时,调用第一个基类构造函数进行初始化。因此,如果基类中没有默认构造函数,那么它就无法解决。

答案 2 :(得分:0)

我遇到了类似的问题,但我的案子却忘记了将上下文承包商公开。

我对此进行了更改:

PostListViewAndroid(Context context) : base(context)

对此:

public PostListViewAndroid(Context context) : base(context)