Java 如何将最后添加的文档放入recyclerview的底部?

Java 如何将最后添加的文档放入recyclerview的底部?,java,android,firebase,android-recyclerview,google-cloud-firestore,Java,Android,Firebase,Android Recyclerview,Google Cloud Firestore,基本上,我想调整的消息,因为他们是应该在通常的聊天应用程序 现在,消息在RecyclerView中正确对齐。但每当我发送新消息时,它都会将它们放在其他消息的顶部。无论何时,只要我回头再来,活动信息都会被正确地安排好(即使是最上面的) 我只希望我发送的消息显示在底部。任何帮助都将不胜感激 mLinearLayout.setReverseLayout(true); 然后: private void loadmessage(){ mFirestore.collection(“Users”).orde

基本上,我想调整的消息,因为他们是应该在通常的聊天应用程序

现在,消息在
RecyclerView
中正确对齐。但每当我发送新消息时,它都会将它们放在其他消息的顶部。无论何时,只要我回头再来,活动信息都会被正确地安排好(即使是最上面的)

我只希望我发送的消息显示在底部。任何帮助都将不胜感激

mLinearLayout.setReverseLayout(true);
然后:

private void loadmessage(){
mFirestore.collection(“Users”).orderBy(“Timestamp”,Query.Direction.DESCENDING).limit(10).addSnapshotListener(new EventListener()){
@凌驾
public void onEvent(@Nullable QuerySnapshot快照,
@可为空的FireBaseFireStore异常(e){
如果(e!=null){
Log.w(“标记”,“侦听:错误”,e);
返回;
}
对于(DocumentChange dc:snapshots.getDocumentChanges()){
开关(dc.getType()){
案件补充:
Message Message=dc.getDocument().toObject(Message.class);
messageList.add(消息);
mAdapter.notifyDataSetChanged();
mMessagesList.scrollToPosition(messageList.size()-10);
打破
}
}
}
});
}试试这个

 recyclerView.scrollToPosition(messageList.size()-1);
 mAdapter.notifyDataSetChanged();

要解决此问题,您需要如下更改查询:

mFirestore.collection("Users")
    .orderBy("Timestamp", Query.Direction.DESCENDING)
    .limit(10)
    .addSnapshotListener(/* ... */);
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(layoutManager);
@Override
public HashMap getItem(int pos) {
    return super.getItem(getCount() - 1 - pos);
}
您的
RecyclerView
应该如下所示:

mFirestore.collection("Users")
    .orderBy("Timestamp", Query.Direction.DESCENDING)
    .limit(10)
    .addSnapshotListener(/* ... */);
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(layoutManager);
@Override
public HashMap getItem(int pos) {
    return super.getItem(getCount() - 1 - pos);
}
这种方法会让你随心所欲地颠倒顺序

编辑:

您可以使用
getItem()
方法反转项查找,如下所示:

mFirestore.collection("Users")
    .orderBy("Timestamp", Query.Direction.DESCENDING)
    .limit(10)
    .addSnapshotListener(/* ... */);
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(layoutManager);
@Override
public HashMap getItem(int pos) {
    return super.getItem(getCount() - 1 - pos);
}
同样的情况下,它也有答案。以防有人在寻找答案。Alex已经说明了解决这种情况的各种方法


并且是firestore聊天应用程序功能的github存储库。

是否使用listview显示消息?我使用RecyclerView显示消息。
mLinearLayout.setReverseLayout(true)
这将反转适配器内容。你想要吗?是的。反转recyclerView将按所需顺序(从旧到新)显示聊天。结果相同。只是现在它不会滚动到底部。当你添加新消息时,请调用这些行。它将在底部显示底部的新消息..我最近在listView中这样做了。。。并且还使用上面的行检查了ReyclerView,它对我有效。它仍然在顶部显示新添加的消息。我正在使用
mLinearLayout.setReverseLayout(true)。你知道吗?mLinearLayout.setReverseLayout(true);删除这一行,然后尝试我的代码是的,但它只会给出前10个文档,而不是最后10个文档。哦,对不起。应该是
降序
,就像我更新的答案一样,而不是
升序
。现在可以用了吗?我已经在用降序了。但由于布局相反,每当我发送新消息时,它都会将它们放在顶部而不是底部。这是一种新的东西。
getItem()
方法在哪里?您需要在适配器类中重写它。