Dans cette application de chat, j'utilise FirebaseIndexRecyclerAdapter
et je veux charger 20 articles sur 20. Le début, je mis keyReg
:Charger 20 par 20 éléments avec FirebaseIndexRecyclerAdapter
keyRef=mFirebaseDatabaseReference
.child("messagesKeys")
.child(usernameFromEmail(mFirebaseUser.getEmail()))
.child(room_type_1)
.limitToFirst(20);
je me 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) {
}
});
et je commence FirebaseIndexRecyclerAdapter
:
mFirebaseAdapter = new FirebaseIndexRecyclerAdapter<FriendlyMessage,MessageViewHolder>(
FriendlyMessage.class,
R.layout.item_message,
MessageViewHolder.class,
keyRef,
mFirebaseDatabaseReference.child("messages").child(room)) {...}
dans la méthode isScrollCompleted()
(en recyclerview.addOnScrollListener), je Je fais ceci:
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) {
}
});
}
Donc, je veux à chaque fois que le défilement est terminé, faites un nouveau keyRef
, actualisez firebaseIndexAdapter
, et affichez les 20 messages suivants, mais cela ne fonctionne pas! Après avoir créé le nouveau keyRef
et actualisé en utilisant mFirebaseAdapter.notifyDataSetChanged()
, aucun nouveau message et les vingt premiers messages ne disparaissent.
Ma question est de savoir s'il est préférable de charger 20 à 20 éléments à chaque fois à partir de .startAt(oldestPostId)
, ou de charger 20, puis 40, puis 60 messages? Parce que si je commence à chaque fois de oldestPostId
, comment sauvegarder et afficher les vingt derniers messages à nouveau?
merci l'homme, mais je ne suis pas si bon dans firebase, je ne sais pas comment utiliser la fonction ... mais mon problème n'est pas comment obtenir lastOneKey, son fonctionnement correctement dans mon code, au début je reçois correctement lastOnekey, et chaque fois que je défile, je reçois correctement LastOnekey des 20 prochains éléments .. mon problème est, lorsque le défilement est terminé, et je fais de nouveau keyRef avec .startAt (lastOnekey), et rafraîchir l'adaptateur, rien ne se passe ... si j'essaye , au lieu de rafraîchir, re activer l'adaptateur, puis apparaît vingt éléments suivants, mais les 20 éléments précédents disparaissent ... pas ajouter de nouveaux messages, mais sont remplacés par de nouveaux ... Je veux montrer un nouveau message ci-dessous ... – bojan
si il est même possible de faire avec firebaseindexrecycleradapter? – bojan