2016-05-20 6 views
1

私はXamarinアプリケーションでENUMの値を使ってSpinnerを構築しようとしています。XamarinのENUM値を持つスピナー

view.FindViewById<Spinner>(Resource.Id.my_spinner).Adapter = new ArrayAdapter<String>(context, layout, Resources.GetStringArray(Resource.my_enum_array)); 

そして、私のvalues/Strings.xmlで:

<string-array name="my_enum_array"> 
<item>Enum Item 1</item> 
<item>Enum Item 2</item> 
</string-array> 

しかし、文字列にMyEnum配列を変更するには時代遅れの取得私はそれを行うだろう 方法は次のようになります。

どのようなフィールドには気を付けずにSpinnerに値をバインドできますか?

答えて

0

Enum.GetValues(typeof(YourEnum))を使用すると、enumのすべての値を取得できます。それを使用して、アダプタの配列を作成することができます。

var enumValues = Enum.GetValues(typeof(YOUR_ENUM)); 
var arrayForAdapter = enumValues.Cast<YOUR_ENUM>().Select(e => e.ToString()).ToArray(); 
var adapter = new ArrayAdapter<string>(context, layout, arrayForAdapter); 

System.Linqを追加する必要があります。

using System.Linq; 

私はこのコードを実行しようとしていませんが、かなり近いと思われます。問題がある場合は教えてください。

編集は、オブジェクト配列をIEnumerable<YOUR_ENUM>に変換するためにCastを追加しました。

+0

「System.linq」が追加されても、「Array」には「Select」と拡張メソッド...の定義が含まれていないというメッセージが表示されます。 –

+0

'Enum.GetValues'は、(genericを使ったバージョンではなく)' Array'の古いバージョンを返します。更新されたコードについては、編集された回答を参照してください。 – dylansturg

+0

また、値が100未満であると思われますので、これは問題ではありませんが、配列が大きくなるにつれ、 'ArrayAdapter'にはパフォーマンス上の問題があります。これは、ガベージコレクタへのJavaおよびGREFの影響によるブリッジングのために発生します。 BaseAdapterをサブクラス化する独自の実装を作成するだけで、簡単に問題を回避できます。 – dylansturg

関連する問題