Слушатель Spinner обнаруживает выбор по умолчанию / отображение как ItemSelected?

1

У меня есть намерение начать работу с несколькими прядильщиками на странице. Я только что установил свой счетчик прослушивателей ItemSelected, следуя этому руководству. Проблема в том, что первый элемент в каждом Spinner в основном "Пожалуйста, выберите", просто чтобы он не был пустым ящиком: поэтому мой ItemSelected Listener обнаруживает тот факт, что, пожалуйста, выберите в spinner и, похоже, предположите, что он был выбран, а не загружен по умолчанию. В идеале я хочу, чтобы слушатель обнаружил только, когда сделан фактический выбор. Каков наилучший способ игнорировать выбор по умолчанию?

Здесь соответствующий код:

    ageSpinner = (Spinner) findViewById(R.id.ageSpinner);
    ageAdapter = ArrayAdapter.createFromResource
    (this, R.array.ageArray, android.R.layout.simple_spinner_item);
    ageAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    ageSpinner.setAdapter(ageAdapter);
    ageSpinner.setOnItemSelectedListener(new MyOnItemSelectedListener());

public class MyOnItemSelectedListener implements OnItemSelectedListener {

    public void onItemSelected(AdapterView<?> parent,
        View view, int pos, long id) {
      Toast.makeText(parent.getContext(), "The planet is " +
          parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
    }

    public void onNothingSelected(AdapterView parent) {
      // Do nothing.
    }
}
  • 0
    Я перенес ваше решение в свой собственный вики-ответ сообщества.
Теги:
listener
spinner

4 ответа

1
Лучший ответ

Проблема в том, что выбор выполняется на первом этапе компоновки. Таким образом, при первом вычислении вашего макета Spinner поднимает onItemSelected. Это довольно раздражает, но так оно и работает. Вы можете попробовать пару разных вещей, но если у вас уже есть "Пожалуйста, выберите" Что-то ", лучшее, что вы можете сделать, это проигнорировать событие, когда выбранный элемент равен 0.

  • 0
    Редактирование моего основного сообщения, чтобы показать мое решение - спасибо за ответ! (Исключить 0)
1

Здесь возможно множество подходов. Например, вы можете переопределить нормальное поведение Spinner с помощью отражения или просто переключиться на Button имитирующую Spinner, которая при нажатии на нее AlertDialog.

Однако другие решения могут быть проще реализовать. Барак назвал один, в то время как альтернативой было бы просто проверить выбранную позицию в Spinner, считая, что "Пожалуйста, выберите" всегда будет первым элементом (и, следовательно, в позиции 0), и вы не будете сортировать по Предметы.

Я уверен, что вы найдете одну из возможностей, подходящих для вашей проблемы, но, возможно, вы также можете немного подробнее рассказать о том, почему именно это проблематично onItemSelected(...) увольняется для первоначального выбора?

1

Установите значение boolean в false, проверьте его в onItemSelected и если false, установите его в true и больше ничего не делайте. В следующий раз, когда это правда, как обычно.

0

Решение от OP.

public class MyOnItemSelectedListener implements OnItemSelectedListener {

    public void onItemSelected(AdapterView<?> parent,
        View view, int pos, long id) {
        if (pos != 0) {
        //this if makes sure it ignores 0, which is 
            //Please Select in the drop down    
      Toast.makeText(parent.getContext(), parent.getTag().toString() +
          parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
        }
    }

    public void onNothingSelected(AdapterView parent) {
      // Do nothing.
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню