我在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>
那么有没有办法将枚举放到微调器或只有数组?或者可能是我做错了。 提前谢谢。
答案 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>