【问题标题】:Android Spinner onNothingSelectedAndroid Spinner onNothingSelected
【发布时间】:2014-09-30 11:06:31
【问题描述】:

在我的应用中,我有一个带有 3 个值的微调器。

如果您按第一个,它应该转到 Activity:UploadPicture

如果你按第二个,它应该会进入 Activity:ChangePassword

如果你按最后一个,它应该会进入活动:登录

但由于微调器在启动时具有第一个值,因此如果您选择第一个值,似乎无法触发 onItemSelected。 (我不想要第四个值:“请选择一个”)。所以我的问题是如何触发 onNothingSelected?因为当我选择第一个值时,它不会触发 onItemSelected。

我的代码:

@Override
        public void onItemSelected(AdapterView<?> parent, View view,
                int pos, long id) {
            System.out.println(pos + " " + first);
            if (!first && pos == 0) {

            goUpload();
            } else if (!first && pos == 1) {
                goInternReportActivity();
                //spinner.setSelection(0);

            } else if (!first && pos == 2) {
                goTeksterActivity();
                //spinner.setSelection(0);
            }
            first = false;
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            // TODO Auto-generated method stub

            goUpload();
        }

【问题讨论】:

  • 添加 --select-- 标记作为微调器中设置的默认值,并验证微调器是否被选中
  • 我不明白你的意思? :(

标签: android spinner onitemselectedlistener


【解决方案1】:

我曾经遇到过同样的问题,想使用onNothingSelected 回调。

我发现如果索引 0 处的项目也有像你这样的方法,我们不能同时使用 onNothingSelectedonItemSelected

根据documentation Spinner onItemSelectedcallback 仅在以下情况下调用:

  1. 新选择的位置与之前选择的位置不同

  2. 如果没有选定的项目

因此,即使您不触摸微调器,也始终选择索引 0 项。 即使这不是您想要做的:索引 0 中的A fourth value "Select Action" 是解决您问题的最佳解决方案。

【讨论】:

    【解决方案2】:

    当活动创建时,微调器总是选择第一个项目。在这里您需要为首次活动启动设置标志。试试那个代码。

    int a = 1, b = 0;
    
    spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
    
                public void onItemSelected(AdapterView<?> parent, View view,
                        int position, long id) {
    
                      if (b < a) 
                      {
                              b++;
                       } 
                      else 
                      {
                         Toast.makeText(context, String.valueOf(parent.getItemAtPosition(position)) , Toast.LENGTH_LONG).show();
                      }
                }
                public void onNothingSelected(AdapterView<?> parent) {
                    return;
                }
            });
    

    onNothingSelected 不是您想要的正确方式。

    【讨论】:

      【解决方案3】:

      我找到了一种解决方法,我在字符串数组中放置了第四个元素。

      像这样:

      public View getCustomView(int position, View convertView,
                  ViewGroup parent) {
      
              LayoutInflater inflater = getLayoutInflater();
              View mySpinner = inflater.inflate(R.layout.custom_spinner, parent,
                      false);
              TextView main_text = (TextView) mySpinner
                      .findViewById(R.id.text_main_seen);
              imageViewLeft = (ImageView) mySpinner.findViewById(R.id.left_pic);
              main_text.setText(spinnerValues[position]);
              if (numberOfElement >= 1) {
                  imageViewLeft.setVisibility(View.GONE);
              }
              if (main_text.getText().equals("")){
                  main_text.setVisibility(View.GONE);
              }
              System.out.println(numberOfElement + " " + main_text.getText() + " HEJ");
              numberOfElement++;
              return mySpinner;
          }
      

      但我让它不可见,所以当微调器打开时它不会显示。所以第一个元素是空的,包含一个图像,当微调器关闭而不是打开时显示。

      【讨论】:

        猜你喜欢
        • 2019-10-24
        • 1970-01-01
        • 2017-02-15
        • 2011-09-19
        • 2012-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-04
        相关资源
        最近更新 更多