基本上,我想使消息与通常的聊天应用程序中的消息对齐。
现在,消息在RecyclerView
中已正确对齐。但是,每当我发送新消息时,它将它们置于其他消息的顶部。每当我回头再来一次,活动消息都会被正确安排(甚至是最上面的消息)。
我只希望我发送的消息显示在底部。任何帮助将不胜感激
mLinearLayout.setReverseLayout(true);
然后:
private void loadmessage() {
mFirestore.collection("Users").orderBy("Timestamp", Query.Direction.DESCENDING).limit(10).addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot snapshots,
@Nullable FirebaseFirestoreException e) {
if (e != null) {
Log.w("TAG", "listen:error", e);
return;
}
for (DocumentChange dc : snapshots.getDocumentChanges()) {
switch (dc.getType()) {
case ADDED:
Message message = dc.getDocument().toObject(Message.class);
messageList.add(message);
mAdapter.notifyDataSetChanged();
mMessagesList.scrollToPosition(messageList.size()-10);
break;
}
}
}
});
}
答案 0 :(得分:2)
要解决此问题,您需要像这样更改查询:
mFirestore.collection("Users")
.orderBy("Timestamp", Query.Direction.DESCENDING)
.limit(10)
.addSnapshotListener(/* ... */);
您的RecyclerView
应该如下所示:
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(layoutManager);
此方法将根据您的需要将订单撤消。
编辑:
您可以遍历getItem()
方法来像这样反转项目查找:
@Override
public HashMap getItem(int pos) {
return super.getItem(getCount() - 1 - pos);
}
答案 1 :(得分:0)
尝试一下...
recyclerView.scrollToPosition(messageList.size()-1);
mAdapter.notifyDataSetChanged();
答案 2 :(得分:0)