簡體   English   中英

Firebase在滾動上加載更多項目(Android)

[英]Firebase to load more items on scroll (Android)

我正在嘗試創建一個聊天應用程序,我使用Firebase作為我的后端,我正在使用發送的最后10條消息填充我的listview onCreate(),我只是想在用戶向上滾動時^它將每次加載10個時間。

我完成了所有工作,問題是Firebase每次都加載所有數據,而不是將現有數據增加10。

例如:它在啟動時加載10條消息,當我向上滾動它加載20條消息,然后它加載30條消息,而不是一次只加載10條消息。

這是代碼:

//Listview to find when user is scrolling and reach the top i.e firstVisibleItem == 0

messagesList.setOnScrollListener(new AbsListView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(AbsListView absListView, int i) {

    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
        int visibleItemCount, int totalItemCount) {

        if (firstVisibleItem == 0 && !loading) {
            msgNum += 10;
            setMessagesList(msgNum); //your load more function
        }
    }
});

//Firebase to load more on scroll code:
public void setMessagesList(int msgNum) {

    MessegesRef2 = database.getReference("chatsMessages").child(chatID);
    messageValueListener = MessegesRef2.orderByChild("creationDate").limitToLast(msgNum).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            loading = true;
            for (DataSnapshot data: dataSnapshot.getChildren()) {

                ChatMessage chatMessage = data.getValue(ChatMessage.class);

                chatMessageAdapter.add(chatMessage);
                chatMessageAdapter.notifyDataSetChanged();
            }
            loading = false;
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

我想你可以使用endAt()

ref.orderByChild("creationDate").limitToLast(pageSize).endAt(oldestLocalMessageTime).addValueEventListener
// pageSize is the number of messages you want to load each time (10)
// oldestLocalMessageTime is the time of oldest message that you have loaded from Firebase
// everytime you load/load more messages you need to update oldestLocalMessageTime value

你可以使用startAt(),endAt()和equalTo()方法。 當用戶到達列表的末尾然后調用方法從服務器加載更多。 確保實現ValueEventListener。

Query pagination = mDatabase.orderByChild("id").startAt(startAt).endAt(startAt + 10);
pagination.addListenerForSingleValueEvent(this);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM