我正在使用微调器让用户在创建和更新对话框中选择数据库关系(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的内容。
有没有比在数据库中使用字符串匹配执行另一个select更好的方法来接收它?
答案 0 :(得分:0)
为OnItemSelectedListener
和方法
Spinner
onItemSelected(AdapterView<?> parent,View view, int pos, long id)
您拥有所选项目的id
,将此id
保存在班级变量中
(比方说:long selectedId
)然后在数据库中保存选择
caller.updateTask(task_id, field_name.getText().toString(), selectedId);
答案 1 :(得分:0)
我想我终于找到了一个很好的解决方案:
caller.updateTask(task_id, field_name.getText().toString(),s.getItemIdAtPosition(s.getSelectedItemPosition()));