我這樣做幾乎同樣的事情,開始做查詢:
@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裏面,當你從火力得到的消息。
在這裏,我要告訴給火力做升序(如前),但只選擇與時間戳<這些項目=最後一個項目已經對用戶可見。(.endAt(messageList.get(messageList.size()-1).getTimestamp())
告訴給火力點正是這一點),最後像以前一樣limitToLast
。
現在你可以隨時調用這個方法(loadMoreItems
)(在你的情況下,當用戶確實拉動刷新)。
@Frank van Puffelen我想問你的答案,這對我來說真的很珍貴。 – Gattsu
@Maveň感謝賞金,我現在得到了正確的答案。 – Gattsu