#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(""); } }); } });
Комментариев нет:
Отправить комментарий