onGeoQueryReady 时通知数据集更改为适配器的条件
Condition to notifyDataSetChanged to adapter when onGeoQueryReady
关于处理 geoQueries 和适配器时正确方法的一个小问题。
我在 GeoQuery 数据库中有一个用户键列表(明显有坐标),当他们进入某个范围时,我想在 ListView 中显示它们。
这是一些代码。
usersGeoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
firebaseDatabase.getReference("users").child(key).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
users.add(user);
// if ( ??? )
mAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public void onKeyExited(String key) {
for(Iterator<User> it = users.iterator(); it.hasNext();){
User user = it.next();
if(user.id == key){
it.remove();
}
}
// if ( ??? )
mAdapter.notifyDataSetChanged();
}
@Override
public void onKeyMoved(String key, GeoLocation location) { }
@Override
public void onGeoQueryReady() {
// this actually triggers before firebase listeners
}
@Override
public void onGeoQueryError(DatabaseError error) {
}
});
实际上,这可行,但是,当然,每次将条目添加到列表时,它都会通知对适配器的更改。所以这对性能不利。
对此有什么明智的建议吗?
谢谢!
典型的方法是对未决项目进行计数。因此,每次获得新密钥时,都会增加计数器。每次拿到对应的数据,就递减。一旦计数器为 0 并且 onGeoQueryReady
被触发,您就知道您已经获得了所有初始项目。
关于处理 geoQueries 和适配器时正确方法的一个小问题。
我在 GeoQuery 数据库中有一个用户键列表(明显有坐标),当他们进入某个范围时,我想在 ListView 中显示它们。
这是一些代码。
usersGeoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
firebaseDatabase.getReference("users").child(key).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
users.add(user);
// if ( ??? )
mAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public void onKeyExited(String key) {
for(Iterator<User> it = users.iterator(); it.hasNext();){
User user = it.next();
if(user.id == key){
it.remove();
}
}
// if ( ??? )
mAdapter.notifyDataSetChanged();
}
@Override
public void onKeyMoved(String key, GeoLocation location) { }
@Override
public void onGeoQueryReady() {
// this actually triggers before firebase listeners
}
@Override
public void onGeoQueryError(DatabaseError error) {
}
});
实际上,这可行,但是,当然,每次将条目添加到列表时,它都会通知对适配器的更改。所以这对性能不利。
对此有什么明智的建议吗?
谢谢!
典型的方法是对未决项目进行计数。因此,每次获得新密钥时,都会增加计数器。每次拿到对应的数据,就递减。一旦计数器为 0 并且 onGeoQueryReady
被触发,您就知道您已经获得了所有初始项目。