使用RecyclerView
向SwipeRefreshLayout
添加较旧的数据时遇到了问题,因此,这就是我从Firebase
检索并将数据放入RecyclerView
的方法
private void messageList() {
referenceMessages.orderByKey().limitToLast(10).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
MessagesInfo messages = dataSnapshot.getValue(MessagesInfo.class);
result.add(messages);
adapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
MessagesInfo messages = dataSnapshot.getValue(MessagesInfo.class);
result.remove(messages);
adapter.notifyDataSetChanged();
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
正如我所看到的,我将检索到的邮件的限制设置为最近10条,这意味着将显示10条最新的邮件。到目前为止,一切正常,消息显示为
-20thmessage(the oldest)-
-21stmessage-
-...-
-29thmessage-
-30thmessage(the newest)-
现在我这样使用SwipeRefreshLayout
private void swipe(){
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
referenceMessages.orderByKey().endAt("-LHUhkub4iaZNNzmtUcs").limitToLast(10).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
MessagesInfo messages = dataSnapshot.getValue(MessagesInfo.class);
recyclerView.scrollToPosition(0);
result.add(0, messages);
adapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
}
并且它可以正确地检索数据,我的意思是前10条消息在硬编码endAt()
之前但在刷卡后不能正确地放置数据。如果我不使用index 0
新数据被放置在最新消息的底部,看起来像这样
-30thmessage(the newest)-
-10thmessage-
-...-
-19thmessage-
-20thmessage(the newest)-
当我使用index 0
时,数据是从已加载的消息的顶部添加的,但是像这样
-20thmessage(the oldest)-
-19thmessage-
-...-
-11ththmessage-
-10th-
,所以它被上下颠倒了。希望你能理解我的意思:)任何输入都将受到赞赏