自定义渲染器出现MissingMethodException异常

4

当加载 MainPage 时,Visual Studio 会进入断点模式,并显示以下错误:

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

我更新了我的自定义渲染器类以支持2.5版本,因为 Context 已作为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类的代码片段吗? - rahulaga-msft
@RahulAgarwal发布了错误的类 :P 现在已在编辑中更正。 - Dan
1
添加默认构造函数: public PostListViewAndroid(){} - FaizanHussainRabbani
@FaizanRabbani,那个方法真的有用,只是它会出现一条绿色的下划线,说它在2.5版本之后就已经过时了。 - Dan
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和obj文件夹
  3. 重启Visual Studio
  4. 重新生成

步骤2

尝试在Package Console中更新解决方案中的所有软件包

Update-Package  –reinstall

在进行此步骤之后,如果仍然没有成功,请再尝试第一步。

2
如果基类没有默认的空构造函数(在您的情况下是ListViewRenderer),则无法执行此操作。如果有,则添加以下内容。
public PostListViewAndroid()
    {

    }

这是因为:当派生类被实例化时,首先调用基类构造函数进行初始化。因此,如果基类中没有默认构造函数,则无法正常工作。


1

我遇到了类似的问题,但我的情况是我忘记把上下文构造器设置为公共的。

我做出了以下更改:

PostListViewAndroid(Context context) : base(context)

翻译成中文:

public PostListViewAndroid(Context context) : base(context)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接