In dieser Chat-App verwende ich FirebaseIndexRecyclerAdapter
und ich möchte 20 von 20 Nachrichtenelemente laden. Am Anfang, habe ich keyReg
:Load 20 by 20 Elemente mit FirebaseIndexRecyclerAdapter
keyRef=mFirebaseDatabaseReference
.child("messagesKeys")
.child(usernameFromEmail(mFirebaseUser.getEmail()))
.child(room_type_1)
.limitToFirst(20);
dann bekomme ich 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) {
}
});
und ich beginne FirebaseIndexRecyclerAdapter
:
mFirebaseAdapter = new FirebaseIndexRecyclerAdapter<FriendlyMessage,MessageViewHolder>(
FriendlyMessage.class,
R.layout.item_message,
MessageViewHolder.class,
keyRef,
mFirebaseDatabaseReference.child("messages").child(room)) {...}
in isScrollCompleted()
Methode (in recyclerview.addOnScrollListener), I‘ m dabei:
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) {
}
});
}
Also ich will jedes Mal, nachdem Scroll abgeschlossen ist, machen Sie eine neue keyRef
, aktualisieren Sie firebaseIndexAdapter
, und zeigen Sie die nächsten 20 Nachrichten, aber das funktioniert nicht! Nachdem ich die neue keyRef
mache und unter Verwendung mFirebaseAdapter.notifyDataSetChanged()
aktualisieren, keine neuen Beiträge und die ersten zwanzig Beiträge verschwinden.
Meine Frage ist, ob es besser ist, 20 von 20 Elemente jedes Mal zu laden, beginnend mit .startAt(oldestPostId)
, oder laden 20, dann 40, dann 60 Nachrichten? Weil, wenn ich jedes Mal von oldestPostId
starte, wie zwanzig Nachrichten zurück und wieder zu zeigen?
Danke Mann, aber ich bin nicht so gut in Firebase, ich nicht jetzt, wie man Funktion verwendet ... aber mein Problem ist nicht, wie lastOneKey, seine Arbeit richtig in meinem Code, beim Start bekomme ich richtig lastOnekey, und jedes Mal, wenn ich scrollte, bekomme ich korrekt lastOnekey der nächsten 20 Elemente .. mein Problem ist, wenn scroll abgeschlossen ist, und ich mache neue keyRef mit .startAt (lastOnekey), und aktualisieren Adapter passiert nichts ... wenn ich es versuche , anstatt zu aktualisieren, wieder zu aktivieren Adapter, dann erscheint nächsten zwanzig Elemente, aber vorherige 20 Elemente verschwindet ... nicht neue Nachrichten anhängen, sondern durch neue ersetzt werden ... Ich möchte eine neue Nachricht unten zeigen ... – bojan
ob Es ist sogar möglich, mit firebaseindexrecycleradapter zu tun? – bojan