Xamarin Android 绑定 class FooInvoker 没有实现接口 setter

Xamarin Android binding class FooInvoker does not implement interface setter

我有一个毫无意义的 Xamarin Android 绑定错误!

生成的 class 存根是:

[global::Android.Runtime.Register ("com/scichart/drawing/common/IRenderSurface", DoNotGenerateAcw=true)]
internal class IRenderSurfaceInvoker : global::Java.Lang.Object, IRenderSurface


[Register ("com/scichart/drawing/common/IRenderSurface", "", "Com.Scichart.Drawing.Common.IRenderSurfaceInvoker")]
public partial interface IRenderSurface : global::Com.Scichart.Core.Framework.IInvalidatableElement, global::Com.Scichart.Core.Framework.IView { } 

// Metadata.xml XPath interface reference: path="/api/package[@name='com.scichart.core.framework']/interface[@name='IView']"
[Register ("com/scichart/core/framework/IView", "", "Com.Scichart.Core.Framework.IViewInvoker")]
public partial interface IView : global::Com.Scichart.Core.Framework.IContextProvider, global::Com.Scichart.Core.Framework.IHitTestable 
{

    int Visibility 
    {
        // Metadata.xml XPath method reference: path="/api/package[@name='com.scichart.core.framework']/interface[@name='IView']/method[@name='getVisibility' and count(parameter)=0]"
        [Register ("getVisibility", "()I", "GetGetVisibilityHandler:Com.Scichart.Core.Framework.IViewInvoker, SciChart.Android.Core")] get;
        // Metadata.xml XPath method reference: path="/api/package[@name='com.scichart.core.framework']/interface[@name='IView']/method[@name='setVisibility' and count(parameter)=1 and parameter[1][@type='int']]"
        [Register ("setVisibility", "(I)V", "GetSetVisibility_IHandler:Com.Scichart.Core.Framework.IViewInvoker, SciChart.Android.Core")] set;
    }
}

发生的事情是 IView.Visibility(具有 get、set)与基数 class Android.View.Visibility 冲突。我已经解决了 additions 文件夹中的冲突,但是有这个 IRenderSurfaceInvoker class 是生成的,而不是部分的,并且没有正确实现 IView 接口。

通常我会忽略 metadata.xml 中的 属性 并在部分 class 中手动创建它,但这是不可能的,因为 IRenderSurfaceInvoker 不是部分的。

到底什么是 FooInvoker??!

有什么想法吗? :)

编辑:更新

在下面 Sven-Michael Stube 的回答之后,我有了这个部分解决方案:

<!-- In EnumMethods.xml -->
<mapping jni-interface="com/scichart/core/framework/IView">
    <method jni-name="getVisibility" parameter="return" clr-enum-type="Android.Views.ViewStates" />
    <method jni-name="setVisibility" parameter="visibility" clr-enum-type="Android.Views.ViewStates" />
</mapping>

但是这样生成的IView界面如下:

    global::Android.Views.ViewStates Visibility {
        // Metadata.xml XPath method reference: path="/api/package[@name='com.scichart.core.framework']/interface[@name='IView']/method[@name='getVisibility' and count(parameter)=0]"
        [Register ("getVisibility", "()I", "GetGetVisibilityHandler:Com.Scichart.Core.Framework.IViewInvoker, SciChart.Android.Core")] get;
    }

和警告输出

<attr path="/api/package[@name='com.scichart.core.framework']/interface[@name='IView']‌​/method[@name='setVisibility']/parameter[@name='visibility']"/> matched no nodes

换句话说,上面的 EnumMethods.xml 声明删除了 setter,因为它找不到匹配项。

我该如何调试它?

我认为您不必解决 ViewIView 的问题。您应该将 getter 的 return 值和 setter 的参数覆盖为 EnumMethods.xml 中的 Android.Views.ViewStates .如果您坚持这样做,可能 解决您的问题。

<mapping jni-interface="com/scichart/core/framework/IView">
    <method jni-name="getVisibility" parameter="return" clr-enum-type="Android.Views.ViewStates" />
    <method jni-name="setVisibility" parameter="p0" clr-enum-type="Android.Views.ViewStates" />
</mapping>