setSelection на Счетчике на основе rowId

У меня есть Представление Счетчика, это заполняется через SimpleCursorAdapter.

На основе выбора я должен сохранить rowid в базе данных записи (положение не будет работать, потому что вещи могут быть добавлены и удалены из Базы данных Счетчика).

Это я могу сделать при помощи spinner.getAdapter().getItemId(pos);. Но то, Когда я редактирую запись, я должен сделать положение Счетчика, выбрало, который связывается с этим rowid (в настоящее время).

spinner.setSelection(position); не будет работать, потому что у меня есть rowid, мне нужен способ найти текущую позицию объекта в текущем счетчике на основе rowid в базе данных.

12
задан Pratik Butani 27 January 2014 в 07:30
поделиться

3 ответа

Если вы хотите установить выбор 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"));

Возможно, есть более быстрый способ сделать это, но это всегда работало для меня.

15
ответ дан 2 December 2019 в 20:16
поделиться

У меня была идея, когда я писал это, сделать хэш-таблицу с rowid->pos при заполнении спиннера и затем использовать это. Может кому-то поможет при поиске.

1
ответ дан 2 December 2019 в 20:16
поделиться

Зачем делать это сложным способом, если можно сделать это правильно?

Я ссылаюсь на руководство:

http://d.android.com/reference/android/widget/AdapterView.OnItemSelectedListener.html#onItemSelected%28android.widget.AdapterView%3C?%3E,%20android.view.View,%20int,%20long%29

пример кода:

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 за это просвещение. :)

-2
ответ дан 2 December 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: