#java #android #android_spinner
У меня есть spinner: spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int childposition, long id) { textView.setText(spinner.getSelectedItem().toString()); } @Override public void onNothingSelected(AdapterView parent) { textView.setText(""); } }); У меня есть textView При запуске программы, по стандарту туда устанавливается первое значение списка, т.е: list.add("one"); list.add("two"); Когда я запущу свой пример то у меня в textView будет one. Вопрос: как сделать так что б при запуске программы у меня был textView.setText("") и только тогда когда я нажму на спиннер и выберу item то устанавливалось textView.setText(spinner.getSelectedItem().toString()); ?
Ответы
Ответ 1
То что вы описали - нормальное поведение дефолтного Spinner. Это многим не нравится, поэтому появилось альтернативное решение https://github.com/justjohn/transitwidget/blob/master/src/com/transitwidget/NoDefaultSpinner.java. Добавьте этот класс в свой проект и используйте вместо стандартного Spinner - NoDefaultSpinner. У вас не будет выбираться первое значение по умолчанию, а в самом Spinner будет устанавливаться текст из атрибута prompt.Ответ 2
Есть более изящней способ вместо того что бы тянуть в проект левые исходники :-) Все что нужно это назначить OnItemSelectedListener в методе post() Выглядит это так: spinner.setAdapter(adapter); spinner.post(new Runnable() { @Override public void run() { spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { textView.setText(spinner.getSelectedItem().toString()); } @Override public void onNothingSelected(AdapterView parent) { textView.setText(""); } }); } });
Комментариев нет:
Отправить комментарий