gpt4 book ai didi

android - 如何在 Firebase 中更改值并重新触发 eventListener?

转载 作者:行者123 更新时间:2023-11-30 00:58:15 24 4
gpt4 key购买 nike

我正在使用 Firebase 实时数据库制作一个公共(public)聊天应用程序,但遇到了这个问题。像普通的聊天应用程序一样,我只向用户显示少量文本,并且当/如果用户滚动时,列表会更新并显示更多消息。

我的 Firebase 引用有一个监听器,它只显示(比如 10 条消息):

int j = 10;
myRef.child("Chat").limitToLast(j).addChildEventListener(new com.google.firebase.database.ChildEventListener() {
@Override
public void onChildAdded(com.google.firebase.database.DataSnapshot dataSnapshot, String s) {
// Map<String,Object> datemsg = (Map<String,Object>)dataSnapshot.getValue();

Map<String,Object> msg = (Map<String,Object>)dataSnapshot.getValue();


String text = msg.get("Text").toString();
values.add(text);


@Override
public void onChildChanged(com.google.firebase.database.DataSnapshot dataSnapshot, String s) {

}

@Override
public void onChildRemoved(com.google.firebase.database.DataSnapshot dataSnapshot) {

}

@Override
public void onChildMoved(com.google.firebase.database.DataSnapshot dataSnapshot, String s) {

}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

现在我有一个滚动监听器,它将 j 的值更改为 j+10 但随后未触发 ChildEvenListener 并且新消息未添加到 ListView .

我也尝试过使用查询,但再次遇到同样的问题,更新值后,我应该如何更新适配器?

没有添加新的 child ,因此没有触发 child 事件监听器,但我想改变

的大小
limitToLast(j) 

并重新填充列表。任何帮助,将不胜感激。

最佳答案

Firebase 查询是不可变的。如果您更改传递给 limitToLast() 的值,它将变成一个新查询。

因此您必须将新的监听器附加到新的查询,然后使用来自该监听器的项目重新填充列表。

如果您跟踪列表中每个现有项目的键 (dataSnapshot.getKey()),您可以通过检查来自新监听器的每个项目是否是优化列表的更新已经存在于列表中。

关于android - 如何在 Firebase 中更改值并重新触发 eventListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39825274/

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