У вас есть несколько вариантов.
Вы можете определить идентификатор на основе метки, НО, только если метка уникальна, добавив новый метод, скажем getLabelId
например,
public long getLabelId(String label) {
long rv = -1; //<<<< default return if nothing found
SQLiteDatabase db = this.getWritableDatabase();
String whereclause = "your_label_column_name" + "=?";
String[] whereargs = new String[]{label};
Cursor cursor = db.query(TABLE_NAME,null,whereclause,whereargs,null,null,null);
if (cursor.moveToFirst) {
rv = cursor.getLong(csr.getColumnIndex("your_id_column");
}
cursor.close();
return rv;
}
- очевидно, вам придется изменить_ _ к соответствующим значениям.
Вы можете создать бесплатный массив, содержащий идентификатор, чтобы n-й элемент дополнительного массива содержал идентификатор для n-го элемента списка, возвращенного из getAllLabels
method.
Вы можете создать класс, скажем, Label, который имеет члены для метки и идентификатора, и использовать его в качестве источника Spinner.
Или вы можете использовать CursorAdapter вместоArrayAdapter.
Чтобы использовать последний, вам нужно будет только вернуть курсор из метода getAllLabels
.например: -
public Cursor getAllLabels(){
// Select All Query
String selectQuery = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getReadableDatabase();
return db.rawQuery(selectQuery, null);
}
- ПРИМЕЧАНИЕ !!! CursorAdapters требуют, чтобы столбец
id
имел имя _id
(BaseColumns._ID
можно использовать).Таким образом, чтобы использовать этот метод, вам нужно изменить имя идентификатора столбца на _id
, если оно еще не названо.
вместе с: -
Cursor csr = getAllLabels();
SimpleCursorAdapter dataAdapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_spinner_item,
csr, //<<<< The Cursor to source the Spinner
new String[]{"your_label_column_name"}, //<<<< The FROM Column(s)
new int[]{android.R.id.text1}, //<<<< The respective TO View(s) to populate
0 //<<<< see documentation but 0 will very likely suffice
);
в качестве замены: -
// Spinner Drop down elements
List<String> lables = db.getAllLabels();
// Creating adapter for spinner
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, lables);
Метод Spinner onItemSelected
получает 2 соответствующих значения в качестве 3-го и 4-го параметров / аргументов.3-е - позиция выбранного элемента, 4-е - идентификатор (если используется адаптер курсора).