自定义渲染器的MissingMethodException

问题描述 投票:3回答:3

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

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

我更新了我的Custom Renderer类以支持2.5,因为从版本2.5开始,Context已经过时了

我的自定义渲染器是

[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
{
}
c# xamarin xamarin.forms xamarin.android
3个回答
6
投票

如果您使用的是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. 重启visual studio
  4. 重建

第2步

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

Update-Package  –reinstall

在此步骤之后,如果仍然没有工作,请再次尝试步骤1


2
投票

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

public PostListViewAndroid()
    {

    }

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


0
投票

我有一个类似的问题,但我的情况是我忘了将上下文承包商作为一个公众。

我改变了这个:

PostListViewAndroid(Context context) : base(context)

对此:

public PostListViewAndroid(Context context) : base(context)
© www.soinside.com 2019 - 2024. All rights reserved.