【发布时间】:2018-07-18 15:35:41
【问题描述】:
我在使用SwipeRefreshLayout 将旧数据添加到RecyclerView 时遇到问题,所以,这是我从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) {
}
});
}
});
}
它正确地检索数据,我的意思是在硬编码endAt() 之前的前 10 条消息,但在刷卡之后不正确地放置数据。如果我不使用index 0
新数据放在最新消息的底部,看起来像这样
-30thmessage(the newest)-
-10thmessage-
-...-
-19thmessage-
-20thmessage(the newest)-
当我使用 index 0 时,数据是从已加载消息的顶部添加的,但就像那样
-20thmessage(the oldest)-
-19thmessage-
-...-
-11ththmessage-
-10th-
所以它是颠倒添加的。希望你能理解我:) 任何意见都非常感谢
【问题讨论】:
标签: android firebase android-recyclerview