среда, 11 января 2012 г.

Привязка выбранных данных к Spinner

Допустим у Вас есть определенная выборка данных из базы данных (SQLite) и Вы хотите отобразить ее в компоненте Spinner. Для этого Вам потребуется создать Cursor с данными, CursorAdapter который будет манипулировать вашими данными, ну и собственно сам компонент Spinner объявленный в xml файле вашего проекта.
Поехали:
Функция которая возвращает выборку данных:


public Cursor GetCursorCities(){
String cmd ="select -1 as _id,'' name from t_city union "+
"SELECT s.id as _id, s.name name FROM t_city s ORDER BY s.name";
return getReadableDatabase().rawQuery(cmd, null);
}

Стоит обратить внимание на то, что в запросе я делаю объединение для того, чтобы пользователь мог выбрать пустое значение в списке. И по умолчанию в компоненте Spinner оно установиться тоже как пустое значение. ВАЖНО: ID_KEY нужно помечать как _id!!! Так как в SQLite это считается первичным ключом. 

Далее нам необходимо найти наш компонент определенный в xml файле.

sp_city= (Spinner)findViewById(R.id.sp_city);

Следующим шагом будет создание курсора:


Cursor mCursor =  GetCursorCities();
startManagingCursor(mCursor);  

startManagingCursor - необходимо вызвать эту функцию для того, чтобы mCursor уничтожился после того как он будет не нужен. (Все попытки самому закрыть курсор приводили к ошибкам).

Подходим к финалу и создаем CursorAdapter:


CursorAdapter mAdapter = new SimpleCursorAdapter(this,
            android.R.layout.simple_spinner_item ,mCursor, new String[]{ "name" }, new int[]{android.R.id.text1});

Здесь стоит пояснить:
1. android.R.layout.simple_spinner_item - это типичная разметка для лотка в Spinner'e. Она уже есть в Android системе. Вы можете заменить эту разметку на свою.
2. mCursor - наша выборка данных.
3. new String[]{ "name" } - имя поля, которое мы собираемся отображать (оно есть в запросе).
4. new int[]{android.R.id.text1} - также стандартная разметка в Android'e означающая, что здесь будет находиться текст.

Осталось только присвоить этот CursorAdapter Spinner'у:
city.setAdapter(mAdapter);

Теперь при загрузке Вашего Activity появиться Spinner с данными.



Комментариев нет:

Отправить комментарий