gpt4 book ai didi

java - 显示无尽的先前对象 recyclerView

转载 作者:行者123 更新时间:2023-12-01 12:05:59 26 4
gpt4 key购买 nike

我有一个聊天应用程序,首先我显示最后 50 条消息,然后如果用户向上滚动,它会加载前 50 条消息。

但是,出于某种原因,我就像被困在 1 个滚动条的限制上。我的意思是,例如,如果我的聊天中有 102 条消息,当我初始化聊天时,它会显示消息 62-102。

然后,如果用户向上滚动,它会向他显示消息 12-62。

然后,如果用户向上滚动它仍然停留在 12-62。

我使用的代码是:

public void getChats(String chatID, Boolean loadFlag , EventListener<QuerySnapshot> listener) {

Query lastMessages = db.collection("Chats")
.orderBy("SentTime", Query.Direction.ASCENDING).limitToLast( 50 );

if (loadFlag == false) {
lastMessages.addSnapshotListener( listener );
}

if (loadFlag == true) {
lastMessages.get()
.addOnSuccessListener( new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot documentSnapshots) {
DocumentSnapshot lastVisible = documentSnapshots.getDocuments().get( 0 );

Query previousMessages = db.collection( "Chats" )
.orderBy( "SentTime", Query.Direction.ASCENDING )
.endAt( lastVisible )
.limit( 50 );

previousMessages.addSnapshotListener( listener );
}
} );
}

}
loadFlag是我使用的一些参数,以确保监听器仅在正确的位置。

据我了解,这是因为我一直使用 limitToLast(50)总是相同的 50,但我怎样才能在那里设置新的最后一个对象的值?

我使用的软件包是:
import android.util.Log;

import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.EventListener;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.Query;
import com.google.firebase.firestore.QueryDocumentSnapshot;
import com.google.firebase.firestore.QuerySnapshot;

import java.util.HashMap;
import java.util.Map;

在我的情况下,我有什么理由不能进一步到 1-12 吗?

谢谢

最佳答案

据我了解limitToLast(50)总是取最后 50 条消息。
但可能有适合您的用例的解决方案:根据文档,有一个名为 offset(int n) 的方法这将忽略前 n 个结果。您只需将跳过消息的数量存储在一个变量中。

像这样更改您的代码,然后重试:

int x = //TODO for each user request of old messages increment x and store it somewhere
Query lastMessages = db.collection("Chats")
.orderBy("SentTime", Query.Direction.ASCENDING).offset(x*50).limit(50);

也请改变这个
if (loadFlag == false) {
...
}

if (loadFlag == true) {
...
}

到这段代码:
if (loadFlag) {
//TODO CAREFUL, here loadFlag is TRUE
...
} else {
//TODO CAREFUL, here loadFlag is FALSE
}

关于java - 显示无尽的先前对象 recyclerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61705041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com