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.
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?
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? –
ist der Parameter namens Sichtbarkeit? Das war nur eine Vermutung. –
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 –