Android如何从数据驱动的下拉框中获取所选项目

4

新手问题。我正在使用SimleCursorAdapter从SQLite表中填充下拉菜单,就像在Android开发文档中所示:

Spinner list=(Spinner)findViewById(R.id.cboModel);        
SimpleCursorAdapter ModelAdapter = new SimpleCursorAdapter(this,
   android.R.layout.simple_spinner_item, model,
   new String[] {"Drug"},       
   new int[] {android.R.id.text1});
ModelAdapter.setDropDownViewResource(
        android.R.layout.simple_spinner_dropdown_item);
list.setAdapter(ModelAdapter);
list.setOnItemSelectedListener(onModelSelect);

我已经设置了监听器,但我无法弄清如何获取所选项目的文本,它会获取SQLiteCursor而不是Spinner中实际的文本。

private AdapterView.OnItemSelectedListener 
    onModelSelect= new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> 
            parent, View view, int position, long id) {
            ModelName = parent.getSelectedItem().toString(); 
            android.util.Log.w("OnItemSelect.cboModel", ModelName);     
        }
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub          
        }       
};

谷歌上出现了一些关于这个问题的留言板,但没有答案,因此这似乎是一个常见的新手问题。对于一些人来说可能显而易见,但如果您能指点我正确的方向,我将不胜感激。谢谢。

2个回答

18

由于所选项是一个游标,因此您可以通过使用在原始数据库查询中用于填充Spinner的列的索引调用getString来轻松获取值。

String spinnerString = null;
Cursor cc = (Cursor)(yourSpinner.getSelectedItem());
if (cc != null) {
    spinnerString = cc.getString(
        cc.getColumnIndex("Drug"));
}

使用这种技术,在Spinner从数据库中填充时绝对有效。我没有尝试过使用资源数组。


我尝试了你的代码,但是出现了错误: java.lang.ClassCastException: java.lang.String 无法转换为 android.database.Cursor - AmmY

0

搞定了...获取ID,然后进行数据库查询:

String id_string = String.valueOf(id);

thismodel=Pkmodel.getById(id_string, dbModel);

ModelName=thismodel.getDrug();          

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接