在此聊天应用程序中,我使用的是FirebaseIndexRecyclerAdapter
,我想加载20个20个消息项目。在开始时,我设置keyReg
:使用FirebaseIndexRecyclerAdapter加载20个项目
keyRef=mFirebaseDatabaseReference
.child("messagesKeys")
.child(usernameFromEmail(mFirebaseUser.getEmail()))
.child(room_type_1)
.limitToFirst(20);
然后我得到lastMessageId
:
keyRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot child : dataSnapshot.getChildren()) {
oldestPostId = child.getKey();
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
,我开始FirebaseIndexRecyclerAdapter
:
isScrollCompleted()
方法
mFirebaseAdapter = new FirebaseIndexRecyclerAdapter<FriendlyMessage,MessageViewHolder>(
FriendlyMessage.class,
R.layout.item_message,
MessageViewHolder.class,
keyRef,
mFirebaseDatabaseReference.child("messages").child(room)) {...}
(在recyclerview.addOnScrollListener),我m这样做:
private void isScrollCompleted() {
if (totalItem - currentFirstVisibleItem == currentVisibleItemCount
&& this.currentScrollState == SCROLL_STATE_IDLE) {
keyRef=mFirebaseDatabaseReference
.child("messagesKeys")
.child(usernameFromEmail(mFirebaseUser.getEmail()))
.child(room_type_1)
.orderByKey()
.startAt(oldestPostId)
.limitToFirst(limit);
mFirebaseAdapter.notifyDataSetChanged();
keyRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
boolean is=true;
for (DataSnapshot child : dataSnapshot.getChildren()) {
oldestPostId = child.getKey();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
所以我希望每次滚动完成后,新建一个keyRef
,刷新firebaseIndexAdapter
,并显示接下来的20条消息,但这不起作用! 当我使用新的keyRef
并使用mFirebaseAdapter.notifyDataSetChanged()
进行刷新后,没有新帖子和前20个帖子消失。
我的问题是它是由每一个从.startAt(oldestPostId)
,或负载20,则40开始,然后60消息时,都20个项目中负载20更好? 因为如果我从oldestPostId
每次开始,如何回来并再次显示过去20条消息?
感谢的人,但我不是如此好在firebase,我现在不怎么如何使用功能...但我的问题不是如何得到lastOneKey,它在我的代码中正确工作,开始我得到正确的lastOnekey,每次当我滚动,我得到正确的lastOnekey下20项..我的问题是,当滚动完成,我做新的keyRef与.startAt(lastOnekey),刷新适配器,没有任何反应......如果我尝试,而不是刷新,重新激活适配器,然后出现下20个项目,但以前的20个项目消失...不附加新的消息,但用新的替换...我想在下面显示一条新消息... – bojan
是否甚至可以使用firebaseindexrecycleradapter? – bojan