Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det finns fall där Java Android-bibliotek använder heltalskonstanter för att representera tillstånd som skickas till bibliotekens egenskaper eller metoder. För brett distribuerade bindningar kan det vara bra att binda dessa heltalskonstanter till uppräkningar i C# för att tillhandahålla ett snyggare API för konsumenter.
För interna eller låga användningsbindningar är det vanligtvis inte värt att konfigurera dessa, eftersom konsumenterna helt enkelt kan använda de bundna konstanterna i stället för en uppräkning.
För att underlätta den här mappningen läggs två filer till i bindningsprojekt som standardprojektmall:
EnumFields.xml – Den här filen definierar mappningen mellan Java-heltalskonstanter och en C#-uppräkning
EnumMethods.xml – Den här filen definierar vilka metoder/egenskaper som för närvarande tar en
intmetodparameter eller har enintreturtyp som ska ändras för att använda en uppräkning i stället.
Definiera en uppräkning med hjälp av EnumFields.xml
Filen EnumFields.xml innehåller mappningen mellan Java-konstanter int och C# enums. Nu ska vi ta följande exempel på en C#-uppräkning som skapas för en uppsättning konstanter int:
<mapping jni-class="com/skobbler/ngx/map/realreach/SKRealReachSettings" clr-enum-type="Skobbler.Ngx.Map.RealReach.SKMeasurementUnit">
<field jni-name="UNIT_SECOND" clr-name="Second" value="0" />
<field jni-name="UNIT_METER" clr-name="Meter" value="1" />
<field jni-name="UNIT_MILIWATT_HOURS" clr-name="MilliwattHour" value="2" />
</mapping>
Här har vi tagit Java-klassen SKRealReachSettings och definierat en C#-uppräkningstyp som heter SKMeasurementUnit i namnområdet Skobbler.Ngx.Map.RealReach. Posterna field definierar namnet på Java-konstanten (exempel UNIT_SECOND), namnet på uppräkningsposten (exempel Second) och heltalsvärdet som representeras av båda entiteterna (till exempel 0).
Definiera metoder för getter/setter med hjälp av EnumMethods.xml
Med EnumMethods.xml-filen kan du ändra metodparametrar och returnera typer från Java-konstanter int till C# enums. Med andra ord mappas läsning och skrivning av C#-uppräkningar (definieras i EnumFields.xml-filen ) till Java-konstant intget och set -metoder.
Med tanke på den SKRealReachSettings uppräkning som definierats ovan skulle den följande EnumMethods.xml-filen definiera `getter`/`setter` för den här uppräkningen:
<mapping jni-class="com/skobbler/ngx/map/realreach/SKRealReachSettings">
<method jni-name="getMeasurementUnit" parameter="return" clr-enum-type="Skobbler.Ngx.Map.RealReach.SKMeasurementUnit" />
<method jni-name="setMeasurementUnit" parameter="measurementUnit" clr-enum-type="Skobbler.Ngx.Map.RealReach.SKMeasurementUnit" />
</mapping>
Den första method raden mappar returvärdet för Java-metoden getMeasurementUnit till SKMeasurementUnit uppräkningen. Den andra method raden mappar den första parametern för setMeasurementUnit till samma uppräkning.
Med alla dessa ändringar på plats kan du använda följande kod i .NET för Android för att ange MeasurementUnit:
realReachSettings.MeasurementUnit = SKMeasurementUnit.Second;