Я создал приложение, которое использует GeoFire
для поиска других пользователей в пределах определенного радиуса.
Когда в пределах этого радиуса есть другие пользователи, я добавляю их в RecyclerView
.
В это время я продолжаю показывать ProgressBar
.
Все работает хорошо, пока вокруг действительно есть люди.
В случае, если вокруг нет людей, ProgressBar
продолжает отображаться.
Код, который я использую (в упрощенной форме):
private void FindCloseUsers(Double Lat, Double Lon, Double Radius){
List<DiscoverUsers> Users = new ArrayList<>();
GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(Lat, Lon), Radius);
geoQuery.addGeoQueryEventListener( new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
if (!key.equals( auth.getUid() )) {
db.collection( "Users" ).document( key ).collection( "MyUsers" ).get().addOnCompleteListener( task_count -> {
if (task_count.isSuccessful()) {
for (DocumentSnapshot document_near : task_count.getResult()) {
Users.add( new DiscoverUsers( document_near.getString( "UserID" ) ) );
}
}
discoverUserAdapter = new DiscoverUserAdapter( Users, listener );
rv_NearMeUsers.setAdapter( discoverUserAdapter );
rv_NearMeUsers.getViewTreeObserver()
.addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
rv_NearMeUsers.getViewTreeObserver().removeOnGlobalLayoutListener( this );
Flag = true;
}
} );
} );
}
}
@Override
public void onKeyExited(String key) {
}
@Override
public void onKeyMoved(String key, GeoLocation location) {
}
@Override
public void onGeoQueryReady() {
if (Flag) {
pb_Discover.setVisibility( View.GONE );
}
}
@Override
public void onGeoQueryError(DatabaseError error) {
}
} );
}
Мой вопрос в том, как я могу также сделать ProgressBar
невидимым, если вокруг нет людей меня? Насколько я понимаю, onGeoQueryReady
вызывается только тогда, когда рядом был пользователь. Например, как узнать, что результат нулевой или около того.
Спасибо