【发布时间】:2017-05-06 15:01:30
【问题描述】:
我正在尝试制作一个聊天应用程序,我使用 Firebase 作为我的后端, 我正在用发送的最后 10 条消息填充我的列表视图 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) {
}
});
}
【问题讨论】:
-
每当列表滚动时,您都在创建消息引用。这就是您的应用程序获取所有数据的原因。
-
嘿Febi,是的,我知道。因此,我在问如何使用 Firebase 来完成?
-
您只需在列表滚动上更新您的查询,而不是一次又一次地创建引用。
标签: android listview firebase firebase-realtime-database