第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在顯示 Firebase 查詢的 RecyclerView 開頭插入對(duì)象

在顯示 Firebase 查詢的 RecyclerView 開頭插入對(duì)象

HUX布斯 2021-10-28 09:24:57
我正在使用 Firebase 進(jìn)行聊天活動(dòng)來(lái)存儲(chǔ)消息并RecyclerView顯示它們。根據(jù)下面的適配器構(gòu)造RecyclerView函數(shù),初始化時(shí),從 Cloud Firestore 查詢最后 50 條消息,并按 Unix 時(shí)間戳按降序排列。然后我在我的聊天活動(dòng)中使用 setStackFromEnd(true) 來(lái)翻轉(zhuǎn)它們的顯示順序,因?yàn)樽钚碌南?yīng)該在底部附近,并且使用 messageList.add(0,message) 將新消息添加到適配器的消息列表中這提出了一個(gè)問(wèn)題。在 onBindViewHolder 中,以前可以接受的:Message message = messageList.get(position);holder.message.setText(message.getMessage());holder.author.setText(message.getAuthor() + ":");不再有效,因?yàn)楫?dāng) RecyclerView 加載時(shí),進(jìn)入 RecyclerView 的消息將是最新消息的重復(fù)(位置 0 中的消息)。IE:留言一留言一留言一留言一代替:留言一留言二留言三訊息四其中“消息一”RecyclerView是創(chuàng)建時(shí)的最新消息。將其替換為:Message message = messageList.get(0);holder.message.setText(message.getMessage());holder.author.setText(message.getAuthor() + ":");在onBindViewHolder得到真正的最新消息將讓它出現(xiàn)在屏幕上,但也隨之更換最新消息的所有項(xiàng)目時(shí),則可將其回收。最終,我希望按照新近的順序從下到上查詢消息,同時(shí)繼續(xù)將最新消息放在底部(就像有史以來(lái)的每個(gè)聊天應(yīng)用程序一樣),而不必查詢整個(gè)集合。我應(yīng)該在哪里糾正我的錯(cuò)誤以及如何糾正?適配器構(gòu)造函數(shù):public ChatRecyclerViewAdapter(Context mContext, ArrayList<String> mMessage, ArrayList<String> mAuthor, String mRoomID, FirebaseFirestore firestore) {        messageList = new ArrayList<>();        firestore = FirebaseFirestore.getInstance();        mCollection = firestore.collection(mRoomID + "_messages");        Query query = mCollection.orderBy("timestamp", Query.Direction.DESCENDING).limit(50);        query.addSnapshotListener(new EventListener<QuerySnapshot>() {            @Override            public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {                for (DocumentChange documentChange : queryDocumentSnapshots.getDocumentChanges()) {                    switch (documentChange.getType()) {                        case ADDED:                            documentChange.getDocument();                            Message message = documentChange.getDocument().toObject(Message.class);                            messageList.add(0,message);                            notifyItemInserted(messageList.size());                    }                }            }        });
查看完整描述

1 回答

?
四季花海

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊

您的代碼中的問(wèn)題是您使用 aUnix timestamp而不是使用Date對(duì)象按降序排序。為了使其工作,我建議您更改將時(shí)間戳存儲(chǔ)為日期的方式。為此,請(qǐng)參閱我在這篇文章中的回答,我已經(jīng)解釋了如何使用 aPOJO class或使用 a來(lái)實(shí)現(xiàn)這一點(diǎn)Map。

在這里,您可以找到有關(guān)如何創(chuàng)建聊天應(yīng)用程序的教程,我在其中解釋了您正在尋找的完全相同的內(nèi)容。請(qǐng)看下面的截圖:

http://img1.sycdn.imooc.com//6179fc2b0001fae209160634.jpg

在我用作查詢的代碼中,以下代碼行:


val query = rootRef!!

    .collection("messages")

    .document(roomId)

    .collection("roomMessages")

    .orderBy("sentAt", Query.Direction.ASCENDING)


查看完整回答
反對(duì) 回復(fù) 2021-10-28
  • 1 回答
  • 0 關(guān)注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)