Vytváření výčtů

Existují případy, kdy knihovny Pro Android v Javě používají celočíselné konstanty k reprezentaci stavů, které se předávají vlastnostem nebo metodám knihoven. U široce distribuovaných vazeb může být užitečné svázat tyto celočíselné konstanty k výčtům v jazyce C#, aby poskytovalo hezčí rozhraní API pro uživatele.

Pro vazby s interním nebo nízkým využitím obvykle není nutné je nastavit, protože spotřebitelé mohou místo výčtu jednoduše použít vázané konstanty.

Pro usnadnění tohoto mapování se do vazeb projektů ve výchozí šabloně projektu přidají dva soubory:

  • EnumFields.xml – Tento soubor definuje mapování mezi celočíselnou konstantou Jazyka Java a výčtem jazyka C#

  • EnumMethods.xml – Tento soubor definuje, které metody nebo vlastnosti v současnosti akceptují int parametr metody nebo mají návratový int typ, které by měly být upraveny, aby místo toho používaly výčet.

Definování výčtu pomocí EnumFields.xml

Soubor EnumFields.xml obsahuje mapování mezi konstantami Java int a jazykem C# enums. Podívejme se na následující příklad výčtu jazyka C#, který se vytváří pro sadu int konstant:

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

Zde jsme vzali třídu SKRealReachSettings Java a definovali výčet jazyka C# nazývaný SKMeasurementUnit ve jmenném prostoru Skobbler.Ngx.Map.RealReach. Položky field definují název konstanty Java (příklad UNIT_SECOND), název položky výčtu (příklad Second) a celočíselnou hodnotu reprezentovanou oběma entitami (příklad 0).

Definování metod getter/setter pomocí EnumMethods.xml

Soubor EnumMethods.xml umožňuje měnit parametry metody a vracet typy z konstant Javy int do jazyka C# enums. Jinými slovy, mapuje čtení a zápis výčtů v jazyce C# (definovaných v souboru EnumFields.xml) na konstanty a metody v jazyce Javaintgetset.

Vzhledem k výčtu SKRealReachSettings definovanému výše by následující souborEnumMethods.xml definoval getter/setter pro tento výčet:

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

První method řádek mapuje návratovou hodnotu metody v Javě getMeasurementUnit na SKMeasurementUnit enum. Druhý method řádek mapuje první parametr z setMeasurementUnit na stejný výčet.

Jakmile provedete všechny tyto změny, můžete v .NET for Android nastavit MeasurementUnit na následující kód:

realReachSettings.MeasurementUnit = SKMeasurementUnit.Second;