2016-04-10 4 views
0

Ich habe einen Xamarin Android Bindungsfehler, der keinen Sinn macht!Xamarin Androide Bindung Klasse FooInvoker implementiert keine Schnittstelle Setter

Die generierten Klasse Stubs sind:

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

Was passiert ist IView.Visibility mit einer Basisklasse Android.View.Visibility (das hat bekommen, setzen) in Konflikt. Ich habe den Konflikt im Ordner "additions" bearbeitet, aber es gibt diese IRenderSurfaceInvoker-Klasse, die generiert wird und nicht partiell ist und die IView-Schnittstelle nicht ordnungsgemäß implementiert.

enter image description here

Normalerweise würde ich das Hotel im metadata.xml ignorieren und sie manuell in einer Teilklasse erstellen, aber das ist nicht möglich, da IRenderSurfaceInvoker nicht parteiisch ist.

Was ist ein FooInvoker überhaupt ??!

Irgendwelche Ideen? :)

EDIT: UPDATE

Nachdem Sven-Michael Stube Antwort unten, ich habe diese Teillösung:

<!-- 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> 

Aber dies führt in der IView-Schnittstelle erzeugt wird, wie folgt:

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

und der Warnausgang

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

Mit anderen Worten, die obige EnumMethods.xml-Deklaration löscht den Setter, da er keine Übereinstimmung finden kann.

Wie kann ich dies debuggen?

Antwort

1

Ich denke, Sie müssen Ihr Problem View vs IView Problem nicht umgehen. Sie sollten den Rückgabewert des Getters und den Parameter des Setters auf Android.Views.ViewStates in EnumMethods.xml überschreiben. Dieses kann Ihr Problem lösen, wenn Sie es konsequent tun.

<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> 
+0

Ein kleines Problem. jni-class sollte jni-interface sein, sonst können beide Knoten nicht gefunden werden. Aber selbst dann ersetzt es die getVisbility und löscht die setVisibility mit der Warnung Keine Knoten gefunden Irgendwelche Ideen? –

+0

ist der Parameter namens Sichtbarkeit? Das war nur eine Vermutung. –

+0

In Java ist es ja. C# kann es immer noch nicht finden. Ich habe es jedoch zu p0 benannt und es hat zufällig funktioniert: 0 –

Verwandte Themen