0

Android のスピナーに問題があります。そのコンテンツに列挙値を設定できません。スピナーのコードは次のとおりです。

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

列挙型をスピナーに配置する方法、または配列のみを配置する方法はありますか? または、私が間違っているかもしれません。前もって感謝します。

4

2 に答える 2

2

私の知る限り、あなたがやろうとしていることは、現在の形では不可能です。名前attr空間は、値ではなく、 View(Group)s/ Widgets などの「属性」を格納するためのものです。したがって、省略形です。少し考えてみると、これがサポートされていれば、おそらくクラスにgetEnumeration()メソッドのようなものがあったかResources、値をMap.

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

別のアプローチとして、キーと値を 1 つの文字列にマージする方法があります。たとえば、特殊な区切り文字を使用しますが、これはおそらく、ユーザーに表示する前に前処理する必要があることを意味します。これは最も柔軟なソリューションではなく、私が好むものではありません。

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

于 2012-05-01T09:40:03.797 に答える
1

プログラム的には可能です。XMLのenum経由では可能だとは思いません。XMLの文字列配列のみが機能します。

Java コードでのプログラムによる例:

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

XML の文字列配列による例:

レイアウト:

<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>
于 2012-05-01T10:09:12.257 に答える