在下面的POC中,我们将addChildEventListener
所有@Override
方法作为第二个参数接受“String s”,这是前一个孩子的关键。
这有什么具体原因吗?我想有一些设计模式,知道前一个孩子的钥匙会让事情变得更容易吗?
Query recentPostsQuery = mDatabase.child("Posts").limitToFirst(100);
recentPostsQuery.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
Log.d("test", dataSnapshot.getKey());
Log.d("test", dataSnapshot.child("Title").toString());
Log.d("test", s);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
答案 0 :(得分:0)
对于查询的初始子项,将按您请求子项的顺序调用onChildAdded
。在你的代码片段中,这意味着它需要增量键。
但稍后可能会在两个现有节点之间添加一个孩子。在这种情况下,onChildAdded
会触发,您可以使用String previousKey
来确定在视图中插入的位置。