я сделал почти то же самое, таким образом:
В своем классе (я предполагаю, что это активность), создать переменную-член Query
типа:
private Query queryChat;
В методе onStart
, начать делать запрос:
@Override
public void onStart() {
super.onStart();
// initialize your value event listener
queryChat= mFirebaseDatabaseReference.
.orderByChild("timestamp")
.limitToLast(pageSize);
queryChat.addListenerForSingleValueEvent(yourValueEventListener);
}
pageSize
является int
и здесь необходимо установить значение 100.
Выполняя таким образом, вы сначала делаете восходящий порядок своих сообщений (так что первые сообщения в результирующем упорядоченном списке являются самыми старыми), а затем вы выбирая последние pageSize
сообщений (так, pageSize
последний в порядке времени). Итак, вы получите первый (по порядку времени, начиная с самого нового) pageSize
сообщений.
Я предполагаю, что вы уже внедрили здесь ValueEventListener
. Кроме того, timestamp
- это поле в сообщении firebase, в котором вы сохранили метку времени в миллисекундах вашего сообщения.
Теперь определим метод в классе, как это:
private void loadMoreItems() {
queryChat= mFirebaseDatabaseReference.
.orderByChild("timestamp")
.endAt(messageList.get(messageList.size()-1).getTimestamp())
.limitToLast(pageSize);
queryChat.addListenerForSingleValueEvent(yourValueEventListener);
}
messageList
здесь является ArrayList, который хранит сообщения чата, и заполняется внутри ValueEventListener, когда вы получаете сообщения от firebase.
Вот, я говорю, чтобы firebase сделать заказ по возрастанию (как и раньше), но выбирать только те элементы, с отметкой времени < = последний элемент уже виден пользователю. (.endAt(messageList.get(messageList.size()-1).getTimestamp())
говорит на firebase именно это), и, наконец, limitToLast
по-прежнему.
И теперь вы можете вызвать этот метод (loadMoreItems
) всякий раз, когда вы захотите (в вашем случае, когда пользователь тянет для обновления).
@Frank van Puffelen Я хотел бы получить ваш ответ на этот вопрос, который был бы действительно драгоценным для меня. – Gattsu
@ Maveň спасибо за щедрость, я получил правильный ответ. – Gattsu