Мне нужно, чтоб при развертывании Spinner
1й пункт "Выберете..." скрывался или убирался из массива, привязанного к Spinner
.
Пробовал установить visability GONE 1-му айтему - скрывается не полностью, если из метода getDropDownView()
вернуть null
- вылетит с ошибкой.
Пробовал отслеживать событие открытия Spinner с помощью View.OnClickListener
- тоже вылетел с ошибкой:
java.lang.RuntimeException: Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
at android.widget.AdapterView.setOnClickListener(AdapterView.java:774)
Решение следующее. В данных создаем последний пункт с той надписью, которая должна быть в закрытом спиннере (в примере это select city ..). Позицию в спиннере переводим на этот пункт. Теперь у нас в закрытом состоянии все отображается как надо.
MainActivity^
public class MainActivity extends AppCompatActivity {
Spinner spinner;
private String[] city = { "Moscow", "New York", "Berlin", "Select city .." };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner = (Spinner)findViewById(R.id.spinner);
CustomAdapter adapter = new CustomAdapter(this, android.R.layout.simple_spinner_item, city);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setSelection(city.length - 1);
}
}
Теперь, для скрытия этого пункта при раскрытии списка просто уменьшаем счетчик пунктов в адаптере на один, переопределив метод getCount()
CustomAdapter:
public class CustomAdapter extends ArrayAdapter {
String [] city;
public CustomAdapter(Context context, int resourceId, String[] city) {
super(context, resourceId, city);
this.city = city;
}
@Override
public int getCount() {
return city.length - 1;
}
}
Скрыть можно и первый пункт, но этого не нужно делать, так как такое решение усложнит логику, что связано с тем, что будет несоответствие позиций списка и позиций в спиннере, так как хотя пункт и скрыт, у него остается индекс.
То есть получится так, что для позиции данных city[1]
спиннер будет возвращать position = 0
. При размещении стартового пункта в конце списка мы избегаем этой проблемы. Кроме того, так решение намного проще и требует намного меньше кода.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Мне нужно получить данные из базыЕсть две переменные LocalDate startDate и LocalDate endDate
Не могли бы вы описать, что нужно сделать по пунктам, чтобы подключить Google Play Services к своему приложению, а также сделать простой рейтинг участников
Есть приложения с несколькими экранами и активностямиКак можно сделать так, чтобы открывая активити2 оно не прекращало работу активити1,...