我有一个ChatActivity
,我可以在两个用户之间成功发送消息。我想使用时间戳值对消息进行排序(例如常规聊天应用程序)。我打电话给orderBy()
,但消息仍未排序。这是我的活动onCreate()
方法中的代码:
Query query = currentUserRef.orderBy("time", Query.Direction.ASCENDING);
FirestoreRecyclerOptions<Messages> options = new FirestoreRecyclerOptions.Builder<Messages>().setQuery(query, Messages.class).build();
mAdapter = new MessagesAdapter(options,messagesList);
mLinearLayout = new LinearLayoutManager(this);
mMessagesList.setHasFixedSize(true);
mMessagesList.setLayoutManager(mLinearLayout);
mMessagesList.setAdapter(mAdapter);
}
private void sendMessage() {
String message = txtMessage.getText().toString();
if (!TextUtils.isEmpty(message)) {
Map messageMap = new HashMap();
messageMap.put("messages", message);
messageMap.put("type", "text");
messageMap.put("time", FieldValue.serverTimestamp());
messageMap.put("from", mCurrentID);
chat_user_ref.add(messageMap).addOnSuccessListener(documentReference -> currentUserRef.add(messageMap).addOnSuccessListener(documentReference1 -> txtMessage.getText().clear()));
mAdapter.notifyDataSetChanged();
mMessagesList.scrollToPosition(messagesList.size());
}
我已经尝试将RecyclerView作为参数传递给适配器,然后尝试在notifyDataSetChanged()
中调用onBindViewHolder()
,但我不能这样做。
我希望在聊天屏幕上对消息进行排序(从最旧到最新)。我希望在发送新消息时更新recyclerview。
开发聊天应用程序时遇到了同样的问题。在布局管理器上设置以下属性可以为我解决此问题:
Query query = currentUserRef.orderBy("time", Query.Direction.DESCENDING);
mLinearLayout.setReverseLayout(true);