如何获得 Spinner 值?

Posted

技术标签:

【中文标题】如何获得 Spinner 值?【英文标题】:How to get Spinner value? 【发布时间】:2010-12-29 05:01:06 【问题描述】:

android 中,我试图通过侦听器获取选定的 Spinner 值。

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

【问题讨论】:

【参考方案1】:

将 setOnItemSelectedListener 添加到微调器引用并获取类似的数据`

 mSizeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) 
            selectedSize=adapterView.getItemAtPosition(position).toString();

【讨论】:

【参考方案2】:
Spinner mySpinner = (Spinner) findViewById(R.id.your_spinner);
String text = mySpinner.getSelectedItem().toString();

【讨论】:

"Value" 在这里相当模糊。这会检索当前微调器项目的标题(如显示给用户的字符串),但如果您将 int 数组映射到微调器,则不会检索其值。 @Doge 获取所选项目的值,例如整数值,例如我们应该制作 int[] valuesArray 并将其归档到 onCreate 函数中,可能来自 arrays.xml,这样我们就可以使用 valuesArray[(int)mySpinner。 getSelectedItemId()] 获取整数值【参考方案3】:

假设这是您的 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_
    android:layout_
    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

【讨论】:

谢谢,这应该在 spinner 的官方 ANDR 文档中,他们只显示通过 Listener 获得价值。 这正是我想要的 完美解决方案! android:entries 让我开心。【参考方案4】:
View view =(View) getActivity().findViewById(controlId);
Spinner spinner = (Spinner)view.findViewById(R.id.spinner1);
String valToSet = spinner.getSelectedItem().toString();

【讨论】:

【参考方案5】:

如果您已经知道该项目是String,我更喜欢:

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

在您知道是StringObject 上调用toString() 似乎比将Object 转换为String 更为迂回。

【讨论】:

【参考方案6】:

旋转器应在选择某些东西时触发“onInselected”事件:

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 返回类型。 不依赖item的位置真的没有办法实现吗? 如果您想在不依赖选择事件的情况下读取微调器值,这不是一个非常有用的解决方案。 @Patrick The annotation Override 永远不需要它只是告诉编译器“你能检查这个覆盖是否正确完成吗?” 如果没有对它进行任何更改,如何获取默认选中项? @dodo 是最合适的。【参考方案7】:

是的,您可以通过setOnItemSelectedListener() 注册监听器,如here 所示。

【讨论】:

谢谢——这也有效,而且(我认为)它使代码更易于阅读。

以上是关于如何获得 Spinner 值?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 dataBinding 与 spinner 一起使用并获取当前值?

Kivy Spinner - 值大小

Android 获取Spinner所有的值,设置指定值

如何制作Spinner的Hint提示效果,并自定义Spinner样式

android spinner 控件 怎么 把显示的数据与选择之后的值分开

如何修改spinner控件的样式