2013-10-01 2 views
2

У меня есть Spinner в моем приложении, которое устанавливается и настраивается следующим образом:андроид вертушки спуски магического

final Spinner left = getLeftShiftSpinner(); //simple gets the Spinner by Id 
    left.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
      left.setSelection(0); 
      try { 
       Log.d("test", "SHIFT_LEFT"); 
       String s = content.shiftLeft(i); 
       content.clear(); 
       updateScreen(s); 
      } catch (ScreenContent.WrongSyntaxException e) { 
       Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show(); 
      } 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> adapterView) { 
     } 
    }); 

Когда я компилирую все, и приложение запускается на моем устройстве я получаю выход «SHIFT_LEFT» из Log.d(...), но я не нажимал ни на что. Приложение просто началось, а затем, ничего не делая, запускается onItemSelectedListener ?? Кто-нибудь знает, почему?

ответ

2

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

EDIT: пример использования логическую переменную, чтобы игнорировать первый триггер

boolean isInitTrigger = true; 
    final Spinner left = getLeftShiftSpinner(); // simple gets the Spinner by Id 
    left.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
      if(isInitTrigger){ 
       isInitTrigger = false; 
       return; 
      } 

      left.setSelection(0); 
      try { 
       Log.d("test", "SHIFT_LEFT"); 
       String s = content.shiftLeft(i); 
       content.clear(); 
       updateScreen(s); 
      } catch (ScreenContent.WrongSyntaxException e) { 
       Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show(); 
      } 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> adapterView) { 
     } 
    }); 
+0

Могу ли я подавить этот автомобиль 'onitemselected'-триггер или фильтровать ее каким-то образом? – wasp256

+0

вы можете обращаться с ним вручную так или иначе. одним из вариантов было бы установить логическую переменную, чтобы по существу игнорировать первый триггер слушателя, а затем сбросить эту переменную 'onResume()'. – invertigo

+0

добавил пример выше, просто не забудьте установить 'isInitTrigger' в true снова в' onResume() ' – invertigo

Смежные вопросы