Android Spinner onNothingSelected

时间:2014-09-30 11:06:32

标签: android spinner onitemselectedlistener

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

如果按第一个,则应转到Activity:UploadPicture

如果你按第二个,它应该转到Activity:ChangePassword

如果你按最后一个,它应该转到活动:登录

但是由于spinner在启动时具有第一个值,所以如果选择第一个值,似乎无法触发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();
        }

3 个答案:

答案 0 :(得分:2)

我曾遇到同样的问题,并希望使用onNothingSelected回调。

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

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

  1. 新选择的职位与先前选择的职位不同

  2. 如果没有选定的项目

  3. 因此,即使您没有碰到您的微调器,也始终会选择索引0项。 即使它不是你想要做的:索引0中的A fourth value "Select Action"是解决问题的最佳解决方案。

答案 1 :(得分:1)

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

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不是你想要的正确方法。

答案 2 :(得分:1)

我找到了一个解决方案,我在String数组中放了一个第四个元素。

像这样:

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;
    }

但我让它看不见,所以当旋转器打开时它不会被显示出来。因此第一个元素是空的,并包含一个图像,当旋转器关闭而不打开时显示该图像。