我正在尝试从xamarin.forms渲染自定义视图。当我尝试使用以下代码进行渲染时
[assembly:ExportRenderer(typeof(SwipeableCard),typeof(CardContainer))]。
但错误就像
一样找不到类型为'Com.andtinde.CardContainer'的默认构造函数。
我想这是因为卡容器没有默认构造函数。我无法提供一个,因为它继承自Adapterview。
我做错了什么。任何帮助都会得到满足。
答案 0 :(得分:24)
我认为这是Xamarin中的已知错误。 我有一个与依赖服务相同的问题。 我通过在iOS Build Options的链接器行为中设置“Link Framework SDKs”解决了这个问题。
答案 1 :(得分:3)
您已经确定了自己做错了什么。 ExportRenderer 需要一个默认构造函数才能完成它正在做的事情。为什么继承自AdapterView会阻止您使用默认构造函数?
您应该可以执行以下操作:
public class CardContainer
{
public CardContainer() // This is a default constructor
: base(...) // If base class requires arguments, pass them here
{
}
}
答案 2 :(得分:2)
通过继承ViewRenderer并将CardContainer作为本机视图类型提供,可能会更好。然后覆盖ViewRenderer的OnElementChanged方法并为渲染器构造一个新的CardContainer。以下是一个可以帮助您入门的简短版本。
注册:
[assembly: ExportRenderer(typeof(SwipeableCard), typeof(SwipeableCardRenderer ))]
班级定义:
SwipeableCardRenderer : ViewRenderer<SwipeableCard, CardContainer>
OnElementChanged覆盖:
if (this.Control == null)
{
this.SetNativeControl(new CardContainer(this.Context));
}
答案 3 :(得分:2)
Xamarin表单PCL:System.MissingMethodException:默认构造函数 找不到类型
每当您使用一个类进行依赖项注入或使用特定于设备的类时,这种情况通常都会发生。您可以通过调试进行尝试。我曾经遇到过同样的情况,但是通过为typeof
属性提供当前类来解决了它。不应提供服务或任何其他接口名称:
[assembly: Xamarin.Forms.Dependency(typeof(Name Of Class))]
而不是:
[assembly: Xamarin.Forms.Dependency(typeof(Name Of Interface))]
答案 4 :(得分:0)
这不是Xamarin的错误,你必须知道如何管理链接的程序集。所有在xamarin中的运行时工作都会得到这样的错误,例如你不能在运行时获得类的peroperty或者在运行时创建实例装配没有联系。 您可以手动管理链接的程序集,也可以在Alessio Campanelli回答here中将其设置在您的应用程序选项中,如果您没有设置它,那么您的应用程序将在apk文件等发布包中获得大尺寸。 如何设置它?
<?xml version="1.0" encoding="utf-8" ?>
<linker>
<assembly fullname="Newtonsoft.Json">
<type fullname="*" />
</assembly>
</linker>
答案 5 :(得分:0)
在更新所有 nuget 软件包后的 Xamarin 中,我也面临这个问题。
最后我使用了一些间接修复
我用假人叫了一个班
ex (isLogged == "55" 永远不会到达)
//added this code to fix default constructor issue for appshell pages
if(isLogged == "55")
{
MainPage = new HomePage();
}