将枚举从xml放到Spinner中

时间:2012-05-01 08:54:59

标签: android xml layout

我在android中有spinner的问题,我无法为其内容设置枚举值。这是微调器的代码:

<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 个答案:

答案 0 :(得分:2)

据我所知,你目前的形式是不可能的。 attr命名空间用于存放View(Group) s / Widget等的“属性”,而不是值 - 因此是缩写。如果你考虑一下,如果支持它,可能会在getEnumeration()类中使用Resources方法,或者可能是将值映射到a的更通用的版本。 ..好吧,Map

使键/值对与Spinner一起使用的标准方法是为res/values/arrays.xml中的键和值定义单独的数组。此类数组中的项按顺序加载,因此您可以使用基于索引的查找来将键与值匹配(反之亦然)。

另一种方法,我确定你会发现,如果你搜索一下,建议将键和值合并为一个字符串;例如通过使用特殊的分隔符,但这可能意味着您需要在将其显示给用户之前对其进行预处理。这不是最灵活的解决方案,绝对不是我喜欢的。

话虽如此,实现自己的XmlPullParser从资源/ xml文件加载键/值对并不太难。如果您按照类文档的链接,您实际上会找到一个免费提供的非常基本的实现。 :)

答案 1 :(得分:1)

以编程方式可行。我认为通过XML中的enum是可能的。它不起作用,只有XML中的String数组才有效。

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>