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

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

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

【问题讨论】:

    标签: 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_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 让我开心。
      【解决方案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 所示。

          【讨论】:

          • 谢谢——这也有效,而且(我认为)它使代码更易于阅读。
          猜你喜欢
          • 2011-02-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-18
          • 1970-01-01
          • 1970-01-01
          • 2019-12-19
          • 2015-01-17
          相关资源
          最近更新 更多