Привязка данных от курсора к Android Spinner - PullRequest
1 голос
/ 31 июля 2011

Я пытаюсь заполнить Spinner в диалоге Android.Когда пользователь нажимает кнопку, появляется диалоговое окно, и я загружаю макет из файла XML.Теперь я пытаюсь заполнить этот Spinner из SQL-запроса.Я искал все и не могу понять, в чем проблема.Я могу перебрать курсор и добавить каждое значение в 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:

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

Я знаюэто будет работать, я просто что-то упускаю, по-видимому.Я знаю, что я мог бы загрузить Spinner со списком имен из ArrayAdapter, который я указал выше, а также заполнить массив идентификаторами из запроса, и когда пользователь выбирает элемент, я мог бы просто выбрать соответствующий элемент из массива идентификаторов.... Но я знаю, что SimpleCursorAdapter будет работать, я просто не могу понять это, и я не сдамся, пока не сделаю, ха-ха.Заранее спасибо за любую помощь.

1 Ответ

3 голосов
/ 31 июля 2011

Похоже, я тупой, ха-ха ... По той или иной причине, вероятно, просто попробовав множество вещей, а потом забыв удалить добавленные мной детали.Я только что удалил c.close(); и теперь все в порядке.Я не забываю добавить, что когда я пытался разобраться, я, должно быть, решил проблему где-то еще, а затем не осознал этого, потому что эта линия все еще была там.Поскольку я на самом деле ничего не делаю с курсором, кроме передачи его функции, его не нужно закрывать.Во всяком случае, все хорошо, я знал, что это будет что-то глупое.Как обычно.

...