2014-09-30 2 views
2

В моем приложении у меня есть счетчик с 3 значениями.Android Spinner onNothingSelected

Если нажать на первый он должен пойти на операцию: UploadPicture

при нажатии второй он должен пойти на операцию: 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(); 
     } 
+0

add --select-- тег как значение по умолчанию, установленное в spinner, и проверка tht spinner для ничего не выбрано –

+0

Я не понимаю, что вы имеете в виду? :( –

ответ

1

Я нашел обходное решение, где я помещаю четвертый элемент в массив строк.

Как это:

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

но я сделать его невидимым, поэтому он не будет показан, когда вертушка открыта. Таким образом, первый элемент пуст и содержит изображение, которое отображается, когда счетчик закрыт и не открыт.

0

Как блесны всегда выбирать первый элемент, когда создает деятельность. Здесь вам нужно установить флаг для запуска первой активности. попробуйте этот код.

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 - это не правильный путь, как вы хотите.

1

У меня когда-то была такая же проблема и я хотел использовать обратный вызов onNothingSelected.

Я обнаружил, что мы не можем использовать onNothingSelected и onItemSelected вместе, если элемент в индексе 0 также имеет некоторый метод, подобный вашему.

В соответствии с documentation Spinner onItemSelected обратного вызова вызывается только тогда, когда:

  1. вновь выбранное положение отличается от ранее выбранной позиции

  2. , если не было никакого выбранного элемента.

Таким образом, индексный пункт 0 всегда выбирается, даже если вы не касаетесь вашего счетчика. Даже это не то, что вы хотите сделать: A fourth value "Select Action" in index 0 - лучшее решение для решения вашей проблемы.