2014-11-16 4 views
0

Обычно я использую boolean для этого, но в этой ситуации я не могу. У меня есть код, как показано ниже на моем Spinner и все работает отлично:Android - Расширенное использование для Spinner.OnItemSelectedListener

spin.setOnItemSelectedListener(new OnItemSelectedListener() { 

      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, 
        int position, long id) { 

         carNames = brand.getChildCarNames(brand.getListDataHeader().get(position)); 
         makeAndShowDialogBox(); 

      } 

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

      } 

     }); 

Проблема заключается в том, когда я использую bolean, что происходит в том, что выбор, который приходит как по умолчанию не показывает DialogBox, если пользователь выбирает то, что по умолчанию значение как хорошо. Например, «Помидор» поставляется по умолчанию, и пользователь хочет выбрать «Томатный»; ничего не происходит.

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

Итак, есть ли способ проверить, действительно ли пользователь нажал для выбора или нет?

ответ

1

Вы можете использовать логическую переменную, чтобы определить, просто ли загружен счетчик, поэтому вы можете запретить отображение диалогового окна при открытии Activity (или onResume). Вы можете объявить переменную вне слушателя и изменить ее значение внутри слушателя. Его значение изменяется внутри слушателя, поэтому вам нужно сделать окончательный Boolean массив вместо обычного Boolean.

Вы можете попробовать следующий код:

final Boolean[] spinnerLoaded = {false}; 

    spin.setOnItemSelectedListener(new OnItemSelectedListener() { 

      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, 
          int position, long id) { 

       if (!spinnerLoaded[0]) { 
        spinnerLoaded[0] = true; 
       } 
       else { 
        carNames = brand.getChildCarNames(brand.getListDataHeader().get(position)); 
        makeAndShowDialogBox();     
       } 
      } 

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

      } 
    }); 
+0

Я уже сделал это. Проблема заключается в этом методе; даже если вы выбираете вариант по умолчанию после открытия операции, он не показывает диалоговое окно. Вы должны выбрать другой выбор, чтобы сделать доступный выбор для отображения диалоговом окне. Лучшее решение для решения вопроса, которое добавляет «Выберите продукт» для первого элемента счетчика, я думаю. – rencsaridogan

+0

Правильно, позиционирование предмета места будет лучшим подходом. – ztan