Я бы предположил, что было бы проще, если бы вы использовали Adpater для Cursor, так как они предназначены для использования с Cursor, и нет необходимости создавать массивы.
SimpleCursorAdapter Это простой, но все же довольно гибкий адаптер для использования с курсорами.
Единственная проблема заключается в том, что адаптеру курсора требуется имя столбца, конкретно _id (BaseColumns._ID
разрешается в этом (какиспользуется ниже)).
- Сначала укажите следующие переменные-члены (очевидно, имена могут быть такими, какие вы хотите)
: -
Cursor mCursor;
SimpleCursorAdapter mAdapter;
Spinner spinner;
SQLiteDatabase db;
В
onCreate Метод действия есть
: -
spinner = this.findViewById(R.id.?????); //
db = ???????? (as per your existing code)
manageSpinner();
Есть метод
: -
private void manageSpinner() {
mCursor = db.query(
ArtistMaster.Artist.ARTIST_NAME,
new String[]{"*","rowid AS " + BaseColumns._ID}, //<<<<<<<< adds _ID column (unless the table is a WITHOUT ROWID table, pretty unlikely)
null,null,null,null,null
);
if (mAdapter == null) {
mAdapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_list_item_1,
mCursor,
new String[]{"the_column"}, // column(s) from which to extract data
new int[]{android.R.id.text1}, // layout views into which the data is placed
0
);
spinner.setAdapter(mAdapter);
// You want want to do something when an Item in the spinner is clicked (this does nothing as it is)
spinner.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//........... do your stuff here
// notes
// id will be the id of the row
// cursor will be positioned, so you can access data from the cursor if needed
}
});
} else {
mAdapter.swapCursor(mCursor);
}
}
Переопределите действия onResume (обновите счетчик при возврате к действию, поскольку базовые данные могли измениться) и onDestroy (чтобы закрыть курсор), используя
: -
@Override
protected void onDestroy() {
super.onDestroy();
mCursor.close();
}
@Override
protected void onResume() {
super.onResume();
manageSpinner();
}