如何获得Spinner价值?


263

在Android中,我正在尝试通过侦听器获取选定的Spinner值。

获得微调机价值的最佳方法是什么?

Answers:


571
Spinner mySpinner = (Spinner) findViewById(R.id.your_spinner);
String text = mySpinner.getSelectedItem().toString();

11
“价值”在这里非常模糊。这将检索当前的微调器项目标题(例如,显示给用户的String),但如果将int数组映射到微调器,则不会获取其值。
A. Steenbergen'2

1
@Doge来获取选定项目的值,例如整数值,例如,我们应该将int [] valuesArray并将其归档在onCreate函数中(可能是从arrays.xml中获取),以便我们可以使用valuesArray [(int)mySpinner.getSelectedItemId()]来获取整数值
Belal mazlom 2015年

128

选择某些内容后,微调器应触发“ OnItemSelected”事件:

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
        Object item = parent.getItemAtPosition(pos);
    }
    public void onNothingSelected(AdapterView<?> parent) {
    }
});

谢谢-可行,尽管我需要将void返回类型添加到方法中。
山姆·达顿

6
不依靠物品的位置,真的有没有办法做到这一点?
Vinz

7
如果要在不依赖选择事件的情况下读取微调器值,则不是一个非常有用的解决方案。
AndroidDev 2013年

3
@Patrick永远不需要注释Override,它只是告诉编译器“您可以检查此Override是否正确完成吗?”
SiXoS,2014年

1
如果未对默认项目进行任何更改,该如何处理?@dodo的是最合适的。
Xtreme Biker 2014年

49

说这是带有微调项(即标题)和值的xml:

<resources>
    <string-array name="size_entries">
        <item>Small</item>
        <item>Medium</item>
        <item>Large</item>
    </string-array>

    <string-array name="size_values">
        <item>12</item>
        <item>16</item>
        <item>20</item>
    </string-array>
</resources>

这是你的微调器:

<Spinner
    android:id="@+id/size_spinner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:entries="@array/size_entries" />

然后在您的代码中获取条目:

Spinner spinner = (Spinner) findViewById(R.id.size_spinner);
String size = spinner.getSelectedItem().toString(); // Small, Medium, Large

并获取值:

int spinner_pos = spinner.getSelectedItemPosition();
String[] size_values = getResources().getStringArray(R.array.size_values);
int size = Integer.valueOf(size_values[spinner_pos]); // 12, 16, 20

谢谢,这应该在微调器的官方ANDR文档中,他们只显示了通过Listener获得价值。
视觉

这正是我所期待的
jet_choong

完美的解决方案!android:entries让我开心。
coderpc

15

是的,你可以注册通过一个倾听者setOnItemSelectedListener(),足以证明这里


谢谢-这也可行,并且(我认为)它使代码更易于阅读。
山姆·达顿

14
View view =(View) getActivity().findViewById(controlId);
Spinner spinner = (Spinner)view.findViewById(R.id.spinner1);
String valToSet = spinner.getSelectedItem().toString();

12

如果您已经知道该项目是String,我希望:

String itemText = (String) mySpinner.getSelectedItem();

调用toString()上的Object,你知道是String好像不仅仅是铸造了一个更迂回的路径ObjectString


2

将setOnItemSelectedListener添加到微调器引用中,并像这样获取数据`

 mSizeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
            selectedSize=adapterView.getItemAtPosition(position).toString();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.