firebaserecycleradapter сортировать / сравнивать / переупорядочивать данные перед заполнением - PullRequest
0 голосов
/ 15 ноября 2018

В моей базе данных firebase у меня есть коллекция значений lat и long для каждого идентификатора пользователя.

Here is how it looks

Я использую данные адаптера ресайлера Firebase, чтобы вывести свои данные в представление переработчика.

FirebaseRecyclerAdapter<Model, ViewHolder> firebaseRecyclerAdapter =
            new FirebaseRecyclerAdapter<Model, ViewHolder>(Model.class, R.layout.row, ViewHolder.class, mRef) {

                @Override
                protected void populateViewHolder(final ViewHolder viewHolder, final Model model, int position) {

                    Double dist = distance(
                            myPosition.latitude,
                            myPosition.longitude,
                            Double.parseDouble(model.getLat()),
                            Double.parseDouble(model.getLon()));
                    Log.d("gs_distance", String.valueOf(dist));

                    viewHolder.setDetails(getApplicationContext(),
                            model.getLat(),
                            model.getLon(),
                            model.getGsname());
                }

Проблема в том, что я хочу изменить порядок / отсортироватьДанные по ближайшим к дальним от моего местоположения, я уже могу получить расстояние на расстоянии каждого широты от моего местоположения.Я не знаю, есть ли способ сравнить каждое значение по их расстоянию непосредственно перед тем, как данные попадают в populateViewHolder.Или, может быть, отсортировать его после того, как вставили в переработчик?Я действительно не знаю.

static double distance(double fromLat, double fromLon, double toLat, double toLon) {
    Location loc1 = new Location("");
    loc1.setLatitude(fromLat);
    loc1.setLongitude(fromLon);

    Location loc2 = new Location("");
    loc2.setLatitude(toLat);
    loc2.setLongitude(toLon);

    float distanceInMeters = loc1.distanceTo(loc2);
    return distanceInMeters / 1000; //convert to km
}
...