2012-05-01 13 views
0

アンドロイドのスピナーに問題があります。コンテンツにenum値を設定できません。ここでは、スピナーのコードです:xmlからスピナーにEnumを入れよう

<Spinner 
    android:id="@+id/spTrainingType" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:entries="@attr/TrainingType" 
    android:prompt="@string/hint_training_type" /> 

そしてここに列挙です:

<declare-styleable name="TrainingStyle"> 
    <attr name="RecallType"> 
     <enum name="Vibro" value="1" /> 
     <enum name="Music" value="2" /> 
     <enum name="Silent" value="3" /> 
     <enum name="Alarm" value="4" /> 
    </attr> 
    <attr name="RepeatType"> 
     <enum name="Daily" value="1" /> 
     <enum name="Weekly" value="2" /> 
     <enum name="Monthly" value="3" /> 
    </attr> 
    <attr name="TrainingType"> 
     <enum name="Jogging" value="1" /> 
     <enum name="Cross" value="2" /> 
     <enum name="Climbing" value="3" /> 
     <enum name="BikeTrip" value="4" /> 
    </attr> 
</declare-styleable> 

そうスピナーに列挙型を入れてどのような方法があるか、配列のみ?それとも、私が間違っているのかもしれない。 ありがとうございます。

答えて

2

私が知る限り、あなたがしようとしていることは現在の形では不可能です。 attr名前空間は、View(Group) s/Widgetなどの '属性'を格納するためのものであり、値ではありません。したがって、省略形です。これがサポートされていれば、ResourcesクラスにgetEnumeration()メソッドのようなものがあったか、または値を...にマップするためのより一般的なバージョンがある可能性があります。Map

Spinnerでキー/値ペアを作成する標準的な方法は、キーと値の個別の配列をres/values/arrays.xmlに定義することです。このような配列の項目は順番に読み込まれるため、インデックスベースのルックアップを使用してキーと値を一致させることができます(逆も同様です)。

もう少し調べてみるとわかるでしょうが、キーと値を1つの文字列にマージすることです。例えば特別な区切り文字を使用することで、これはおそらくユーザーに表示する前に前処理する必要があることを意味します。最も柔軟なソリューションではなく、私が好むものではありません。

言われているように、リソース/ xmlファイルからキー/値のペアをロードするには、独自のXmlPullParserを実装するのはあまり難しくありません。クラスのドキュメントへのリンクをたどると、実際には無料で提供される非常に基本的な実装が見つかります。 :)

1

プログラムで可能です。私はそれがXMLの列挙型を介して可能であるとは思わない。それは動作しません、XMLの文字列配列のみ動作します。 Javaコードでプログラムの

例:

レイアウト:

<TextView android:text="@string/type_prompt"/> 
<Spinner android:id="@+id/type" android:prompt="@string/type_prompt"/> 

値:

<string-array name="type_array"> 
    <item>Default</item> 
    <item>Currency</item> 
    <item>Experience</item> 
</string-array> 
XMLのString配列を介し

public Enum ValueType { 
     DefaultType, NotSoDefaultType, AnotherType 
} 


Spinner viewTypeSpinner = (Spinner) findViewById(R.id.viewTypeSpinner); 

ArrayAdapter viewarrayadapter = new ArrayAdapter<ConsignmentStatus>(this, 
       android.R.layout.simple_spinner_item, 
       ValueType.values()); 
     viewTypeSpinner.setAdapter(viewarrayadapter); 

       viewarrayadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

関連する問題