У меня есть Представление Счетчика, это заполняется через SimpleCursorAdapter.
На основе выбора я должен сохранить rowid в базе данных записи (положение не будет работать, потому что вещи могут быть добавлены и удалены из Базы данных Счетчика).
Это я могу сделать при помощи spinner.getAdapter().getItemId(pos);
. Но то, Когда я редактирую запись, я должен сделать положение Счетчика, выбрало, который связывается с этим rowid (в настоящее время).
spinner.setSelection(position);
не будет работать, потому что у меня есть rowid, мне нужен способ найти текущую позицию объекта в текущем счетчике на основе rowid в базе данных.
Если вы хотите установить выбор Spinner
, который поддерживается CursorAdapter
, вы можете перебрать все элементы в Cursor
и найти тот, который вам нужен (предполагается, что первичный ключ в вашей таблице имеет имя "_id"):
Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(new SimpleCursorAdapter(...));
for (int i = 0; i < spinner.getCount(); i++) {
Cursor value = (Cursor) spinner.getItemAtPosition(i);
long id = value.getLong(value.getColumnIndex("_id"));
if (id == rowid) {
spinner.setSelection(i);
}
}
Если вы хотите получить rowid выбранного элемента, вы можете сделать что-то подобное:
Cursor cursor = (Cursor) spinner.getSelectedItem();
long rowid = cursor.getLong(cursor.getColumnIndex("_id"));
Возможно, есть более быстрый способ сделать это, но это всегда работало для меня.
У меня была идея, когда я писал это, сделать хэш-таблицу с rowid->pos при заполнении спиннера и затем использовать это. Может кому-то поможет при поиске.
Зачем делать это сложным способом, если можно сделать это правильно?
Я ссылаюсь на руководство:
пример кода:
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
{
int index = spinner.getSelectedItemPosition();
Toast.makeText(getBaseContext(),
"You have selected item : " + index + " which is row " + id,
Toast.LENGTH_SHORT).show();
}
public void onNothingSelected(AdapterView<?> arg0) {}
});
Спасибо evancharlton на #android-dev за это просвещение. :)