Обновить ListView с помощью курсора и SimpleCursorAdapter - PullRequest
2 голосов
/ 25 октября 2011

Мой курсор - это выборка данных из sqlite.

msgsdbadapter = new MSGSDBAdapter(this);
msgsdbadapter.open();
cons_cursor = msgsdbadapter.fetchConversations();
startManagingCursor(cons_cursor);

После этого я создаю SimpleCursorAdapter и назначаю его ListView. Теперь ListView может хорошо отображать некоторые записи.

String[] from = new String[] { MSGSDBAdapter.KEY_FROM, MSGSDBAdapter.KEY_MSG, MSGSDBAdapter.KEY_DATE};
int[] to = new int[] { R.id.lblFrom, R.id.lblMsgExcerpt, R.id.lblDate };
cons_cursor_adapter = new SimpleCursorAdapter(context, R.layout.conversation_item, cons_cursor, from, to);
lvConversations.setAdapter(cons_cursor_adapter);

Затем я вставляю новую строку в таблицу и изменяю набор данных уведомлений, но ListView не обновляется

msgsdbadapter.createMsg(msg);
cons_cursor_adapter.notifyDataSetChanged();

А когда мне нужно закрыть соединение дб?

Ответы [ 2 ]

7 голосов
/ 25 октября 2011

Вам нужно либо requery() существующий Cursor, либо выполнить запрос еще раз, чтобы получить новый Cursor и заменить новый Cursor на свой CursorAdapter.

0 голосов
/ 02 мая 2014

Лучшее решение, если вы используете ListFragment, это поместить это в этот образец:

 public SimpleCursorAdapter myNote;
    public class NOteLIST_MAIN extends ListFragment {

    @SuppressWarnings("deprecation")
    @Override
    public void onResume() {
        super.onResume();
        myNote.getCursor().requery();//Don't forget to put these on onResume }

    private void DataLoader(){private void DataFiller(){
          myNote = new SimpleCursorAdapter(getActivity(), R.layout.notes_row_line, notesCursor, from, to,0);
          setListAdapter(myNote);}  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...