Android: получить идентификатор набора данных из заполнителя курсора Spinner - PullRequest
1 голос
/ 17 ноября 2011

Я использую счетчик, чтобы позволить пользователю выбрать отношение базы данных (1: n) в диалоге создания и обновления.Заполнение счетчика курсором базы данных работает нормально:

    //set up spinner
    Spinner spinner = (Spinner) dialog.findViewById(R.id.field_task_fkbudget);
    //set up cursor
    budgetsData = new TBTsqlHelperBudgets(this);        
SQLiteDatabase db = budgetsData.getReadableDatabase();
    Cursor c2 = db.query(TBTsqlHelperBudgets.TABLE,null,null,null,null,null,null);        
    c2.moveToFirst();
    // populate spiner
    SimpleCursorAdapter adapter2 = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, c2, new String[] {TBTsqlHelperTasks.KEY_NAME}, new int[] {android.R.id.text1});
    adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter2);
    spinner.setSelection(0);

Моя проблема сейчас заключается в сохранении выбора в базе данных.Я пытался использовать:

    ... 
    caller.updateTask(task_id, field_name.getText().toString(), s.getSelectedItemPosition());
    ...

, но это дает мне положение наборов данных внутри счетчика.Что мне нужно, так это содержимое поля BaseColumns._ID элемента курсора, выбранного в счетчике.

Есть ли лучший способ получить это, чем сделать еще один выбор с совпадением строк в базе данных?

Ответы [ 2 ]

0 голосов
/ 18 ноября 2011

Мне кажется, я наконец нашел хорошее решение:

caller.updateTask(task_id, field_name.getText().toString(),s.getItemIdAtPosition(s.getSelectedItemPosition()));
0 голосов
/ 17 ноября 2011

Установите OnItemSelectedListener для Spinner и внутри метода

onItemSelected(AdapterView<?> parent,View view, int pos, long id)

У вас есть id выбранного элемента, сохраните это id в переменной уровня класса

(скажем, long selectedId), а затем при сохранении выбора в базе данных

caller.updateTask(task_id, field_name.getText().toString(), selectedId);
...