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/ s 等的“属性” Widget,而不是值 - 因此是缩写。如果您考虑一下,如果支持它,那么类中可能会有类似getEnumeration()方法的东西Resources,或者可能是一个更通用的版本,用于将值映射到......好吧,Map.

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

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

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

于 2012-05-01T09:40:03.797 回答
1

以编程方式是可能的。我认为通过 XML 中的枚举是不可能的。它不起作用,只有 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>
于 2012-05-01T10:09:12.257 回答