ChatGPT解决这个技术问题 Extra ChatGPT

如何获得 Spinner 值?

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

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


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

“价值”在这里很模糊。这将检索当前微调器项目的标题(如显示给用户的字符串),但如果您将 int 数组映射到微调器,则不会检索其值。
@Doge 获取所选项目的值,例如整数值,我们应该制作 int[] valuesArray 并将其归档到 onCreate 函数中,可能来自arrays.xml,因此我们可以使用 valuesArray[(int)mySpinner.getSelectedItemId()] 来获取整数值
E
Erich Douglass

选择某些内容时,Spinner 应触发“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 返回类型添加到方法中。
如果不依赖项目的位置,真的没有办法做到这一点吗?
如果您想在不依赖选择事件的情况下读取微调器值,这不是一个非常有用的解决方案。
@Patrick 永远不需要注解 Override 它只是告诉编译器“你能检查这个覆盖是否正确完成吗?”
当没有对其进行更改时,如何获取默认选定项? @dodo 是最合适的。
l
lenooh

假设这是您的带有微调器条目(即标题)和值的 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

谢谢,这应该在 spinner 的官方 ANDR 文档中,他们只显示通过 Listener 获得价值。
这正是我想要的
完美的解决方案! android:entries 让我开心。
C
CommonsWare

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


谢谢 - 这也有效,并且(我认为)它使代码更易于阅读。
E
Eric Leschinski
View view =(View) getActivity().findViewById(controlId);
Spinner spinner = (Spinner)view.findViewById(R.id.spinner1);
String valToSet = spinner.getSelectedItem().toString();

M
Matt Logan

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

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

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


w
wafaa hilmy

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

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