Как обновить ListView из CursorAdapter? - PullRequest
2 голосов
/ 17 апреля 2011

У меня есть ListView в моей деятельности, который устанавливается в onCreate с помощью

    MyCursorAdapter adapter = new TaskConditsCursorAdapter(this, conditsCursor, taskID, isNewTask);
    setListAdapter(adapter);

Затем я выполняю некоторую работу в MyCursorAdapter.Среди прочего у меня есть специфичный для строк AlertDialog:

...
    builder.setPositiveButton("OK"), new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {
            changeTaskConditBoolValue(taskId, conditId, chosenBoolValue2);
            // refresh?
        }
    });

После changeTaskConditBoolValue я хочу перезагрузить свой список, так как этот метод что-то изменил в базе данных, но список не обновился.requery() приводит к тому, что список пуст.Как я могу подняться «на один уровень выше», чтобы снова работать с adapter и что мне с ним делать тогда?

Большое спасибо!

Ответы [ 4 ]

6 голосов
/ 31 августа 2011

В MyCursorAdapter в методе, вызываемом onClick - в моем случае это changeTaskConditBoolValue(...) Я должен вызвать:

this.changeCursor(db.fetchAllTasks(myParameters));

Это получает новый курсор от моего Database-Classи заменяет свой старый на новый.

Не нашел другого способа изменить курсор внутри CursorAdapter.

4 голосов
/ 17 апреля 2011

Просто позвоните

adapter.notifyDataSetChanged();

Документация: Здесь

1 голос
/ 30 октября 2013

вызов методаquery () адаптера - единственное решение.

Но метод require () устарел.Таким образом, мы можем использовать LoaderManager и Loader.

0 голосов
/ 29 августа 2014

Это то, что работает для меня, я не уверен, что это лучший способ.

c = db.rawQuery( "SELECT * FROM mytable", null); //same line of the initial initialization
adapter.swapCursor(c);

Я обновляю единственный курсор, я не знаю, что делать с новым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...