1
我正在制作一个使用Firebase实时数据库的公开聊天应用程序,但一直存在这个问题。和普通的聊天应用程序一样,我只向用户显示少量文本,以及何时/如果滚动列表的用户更新并显示更多消息。如何更改值并重新触发Firebase中的eventListener?
我有一个监听到我的火力地堡的参考,这是唯一显示(比如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不触发并且新消息不会添加到列表视图中。
我也尝试过使用查询,但在更新值后又出现同样的问题,应如何更新适配器?
没有新的孩子加入,从而childevent监听不会被触发,但我想改变的
limitToLast(j)
大小和重新填充列表。 任何帮助,将不胜感激。
哦,我明白了。我虽然可能有另一种方法来实现它,而不是再次添加一个监听器。现在我有了一个方向,我可以前进。谢谢你的时间。 –
我对此感到困惑的另一件事是,如果我们可以将int值作为参数传递给startAt()或endAt()来指出该子节点中的确切节点数量? –
如果您想要开始的项目的*键*,您可以将其作为第二个参数传递给'startAt()'。但是这是一个经常被开发人员误解的参数,所以ymmv。 –