Страницы

Поиск по вопросам

вторник, 17 декабря 2019 г.

Как выбрать сообщения в ListView из базы данных с помощью CursorAdapter для создания списка диалогов?

#java #android #sqlite #listview #cursoradaper


Имеется база данных sqlite, содержащая таблицу с сообщениями, которая периодически
синхронизируется с глобальной базой данных. 

Из нее производится выборка 

Cursor loadInBackground(){
    Log.d("[MESSAGES QUERY]", MessagesTable.STATUS + sortByStatus
            + " AND " + MessagesTable.DATE + sortByDate);
    return helper.getReadableDatabase().query(MessagesTable.TABLE_NAME,
            new String[]{MessagesTable.ID, MessagesTable.BODY,
                    MessagesTable.DATE,
                    MessagesTable.FROM, MessagesTable.TO,
                    MessagesTable.STATUS},
            MessagesTable.STATUS + sortByStatus + " AND "
                + MessagesTable.DATE + sortByDate,
            null, null, null, null);


и загружается в ListView с помощью CursorAdapter

@Override
public void onLoadFinished(Loader loader, Cursor data) {
    adapter.changeCursor(data); 
}


В программе выводится список сообщений. По клику на любой элемент списка, пользователь
переходит в чат. 

И сейчас, собственно, назрела идея выводить не весь список сообщений, а список диалогов
- только последнее для каждого собеседника. 

Собственно вопрос, как это лучше реализовать? 

Можно ли составить выборку последнее сообщение по дате для каждого уникального id
собеседника, если количество и id собеседников заранее неизвестны? А ведь еще при поступлении
нового сообщения, нужный элемент списка нужно удалить и добавить обновленный вверху
списка. Как это принято делать? Очень не хочется изобретать пяти колесный велосипед,
задача вроде типовая.
    


Ответы

Ответ 1



view - представления, очень хорошо работают, обновляются сами при записи нужных данных в основные таблицы сделай на окно списка диалогов view c сортировкой по дате, и на экран конкретного диалога тоже делай view, можно даже временный.

Комментариев нет:

Отправить комментарий