Firebase在滚动中加载更多商品(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);
链接地址: http://www.djcxy.com/p/94481.html
上一篇: Firebase to load more items on scroll (Android)
下一篇: Multiple instances of btDefaultMotionState, all ignored, but one