将数据从Cursor绑定到Spinner Android

时间:2011-07-31 18:52:27

标签: java android database cursor spinner

我正在尝试在Android对话框中填充Spinner。当用户单击按钮时,会弹出一个对话框,我从XML文件加载布局。现在我试图从SQL查询中填充Spinner。我已经搜遍过,无法弄清问题是什么。我可以循环遍历Cursor并将每个值添加到ArrayAdapter,然后将其用作微调器的列表,但不包含数据库中的_id。我在使用SimpleCursorAdapter之前已经这样做了,我甚至已经完全复制并粘贴了我的旧代码,但仍然无法正常工作。任何帮助将不胜感激。

我的对话代码:

private void displayNewInteractionDialog() {
        final Dialog dialog = new Dialog(this);
        dialog.setContentView(R.layout.mm_new_dialog);
        dialog.setTitle(R.string.mm_new_dialog_title);
        dialog.setCancelable(true);

        final Spinner spinner = (Spinner) dialog.findViewById(R.id.mm_spinner);

        DatabaseInterface db = new DatabaseInterface(this);
        db.open();

        Cursor c = db.getNames();

        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
            android.R.layout.simple_spinner_item,
            c,
            new String[] {DatabaseInterface.KEY_ID, DatabaseInterface.KEY_NAME}, 
            new int[] {android.R.id.text1});

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);

        c.close();
        db.close();

        dialog.show();
}

以下是在我的DatabaseInterface类中返回Cursor的代码:

public Cursor getNames() {
        return db.query(DATABASE_TABLE_4, new String[] {DatabaseInterface.KEY_ID, DatabaseInterface.KEY_NAME}, null, null, null, null, null);
    }

我知道这会起作用我显然只是遗漏了一些东西。我知道我可以使用上面陈述的ArrayAdapter中的名称列表加载Spinner,并使用查询中的ID填充数组,当用户选择项目时,我可以从ID数组中获取相应的项目。 ...但我知道SimpleCursorAdapter会起作用我似乎无法弄明白,我不会放弃,直到我做哈哈。提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

看起来好像我很笨哈哈...出于某种原因,可能只是尝试了很多东西,然后忘记删除我添加的部分。我刚刚删除了c.close();,现在一切都很好。我记得补充一点,因为我试图解决问题,我必须在其他地方解决问题然后没有意识到这一点,因为这条线仍在那里。由于除了将Cursor传递给函数之外,我实际上并没有对Cursor执行任何操作,因此不需要关闭它。无论如何一切都很好,我知道这将是一个愚蠢的事情。像往常一样。