Firebase加载更多滚动项目(Android) [英] Firebase to load more items on scroll (Android)

查看:130
本文介绍了Firebase加载更多滚动项目(Android)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图做一个聊天应用程序,我使用Firebase作为我的后端,
我用最后发送的10条消息填充我的listview onCreate(),
,我只是想当用户滚动^它会每次加载10多个。

我得到了所有的工作,问题是Firebase加载所有数据例如:它在启动时加载10条消息,当我向上滚动时加载20条消息,然后它加载30条消息,而不是一次只加载10条消息。



这是代码:

<$ p $当用户滚动,并达到顶部,即firstVisibleItem == 0

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


$ b @Override
public void onScroll(AbsListView view,int f irstVisibleItem,
int visibleItemCount,int totalItemCount){

if(firstVisibleItem == 0&& !loading){
msgNum + = 10;
setMessagesList(msgNum); //你的加载函数


});

// Firebase加载更多滚动代码:
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){

}
});


解决方案

a href =https://firebase.google.com/docs/reference/js/firebase.database.Query#endAt =nofollow noreferrer> endAt()

  ref.orderByChild(creationDate)。limitToLast(pageSize).endAt(oldestLocalMessageTime).addValueEventListener 
// pageSize是您想要的消息数量(10)
// oldestLocalMessageTime是您从Firebase加载的最旧消息的时间
//每当您加载/加载更多消息时,您需要更新oldestLocalMessageTime值


I'm trying to make a chat application, I use Firebase as my backend, I'm populating my listview onCreate() with the last 10 messages sent, and I just want that when the user scrolls up ^ it will load 10 more every time.

I got all working, the problem is that the Firebase loads all the data every time, and not increasing by 10 the existing data.

For example: it loads 10 messages at startup, and when I scroll up it loads 20 messages, and then it loads 30 messages, instead of just loading 10 more at a time.

This is the code:

//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) {

        }
    });
}

解决方案

I think you can use 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

这篇关于Firebase加载更多滚动项目(Android)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆