2016-04-28 3 views
2

В Java у меня есть перечислениеXamarin Android Mapping java.lang.Enum на C# Enum

package com.acme.common; 

// In java world 
public enum FooEnum { 
    AValue, 
    AnotherValue 
} 

Это используется в коде в Java, например,

// In java world 
public class Bar { 
    void setFoo(FooEnum value) { 
     // ... 
    } 
} 

Это становится сопоставлен с классом в C#, который наследуется java.lang.Enum следующим образом:

// Now in C# generated bindings 
// I want this to be a CLR Enum instead 
public sealed partial class FooEnum : global::Java.Lang.Enum 
{ 
    // ... 
} 
// C# generated class uses Java.Lang.Enum type for getter and setter 
// But I want FooEnum to be clr enum 
public partial class Bar 
{   
    public FooEnum Foo { get; set; } 
} 

Я хотел бы, чтобы отобразить это в C# вместо перечисления используя идею EnumFields.xml, но нет как.

Я гугле Xamarin Android EnumFields и нашел несколько результатов, и прочитал Xamarin Android Binding walthrough, но все еще не уверен, что достаточно, как это сделать ...

ответ

5

Сначала вы должны определить свои перечислений в EnumFields.xml, как они будут выглядеть в C#

<mapping jni-class="com/acme/common/FooEnum " clr-enum-type="Com.Acme.Common.FooEnum"> 
    <field jni-name="AValue" clr-name="AValue" value="0" /> 
    <field jni-name="AnotherValue" clr-name="AnotherValue" value="1" /> 
</mapping> 

Затем вам нужно отредактировать EnumMethods.xml для всех методов, которые потребляют этот Enum

<mapping jni-class="com/skobbler/ngx/map/realreach/SKRealReachSettings"> 
    <method jni-name="getFoo" parameter="return" clr-enum-type="Com.Acme.Common.FooEnum" /> 
    <method jni-name="setFoo" parameter="measurementUnit" clr-enum-type="Com.Acme.Common.FooEnum" /> 
</mapping> 
+0

по Jove Я думаю, что это сработало! И я собирался переписать весь код Java, чтобы использовать int вместо Enum. Благодаря! –

Смежные вопросы