Есть ли способ сортировки firebaserecyclerview после того, как я вычислю значение после получения данных? - PullRequest
0 голосов
/ 07 января 2019

Я использую базу данных Firebase для хранения данных о количестве пользователей. Таким образом, enter image description here

Теперь, когда я получаю их в своем окне, я вычисляю расстояние от моего текущего местоположения до этого местоположения пользователя, используя следующий код,

private void loadLocationForThisUser(Double lat, Double lng, Double lat1, 
    Double lng1) {


        //Create location from user coordinates
        currentUser1 = new Location("");
        currentUser1.setLatitude(lat);
        currentUser1.setLongitude(lng);

        //Create location from friend coordinates
        friend1 = new Location("");
        friend1.setLatitude(lat1);
        friend1.setLongitude(lng1);

        distance = (new DecimalFormat("#.#").format((currentUser1.distanceTo(friend1)) / 1000)+ "km");
}

и вызовите этот метод следующим образом в моем адаптере просмотра firebase,

FirebaseRecyclerOptions<Contacts> options = new FirebaseRecyclerOptions.Builder<Contacts>()
            .setQuery(UsersRef, Contacts.class)
            .build();

    adapter = new FirebaseRecyclerAdapter<Contacts, FindFriendViewHolder>(options) {
        @Override
        protected void onBindViewHolder(@NonNull final FindFriendViewHolder holder, int position, @NonNull final Contacts model) {

            lat = mLastLocation.getLatitude();
            lng = mLastLocation.getLongitude();
            lat1 = Double.parseDouble(model.getMylat());
            lng1 = Double.parseDouble(model.getMylng());                   
            loadLocationForThisUser(lat, lng, lat1, lng1);
            holder.txt_distance.setText(distance);
        }

        @NonNull
        @Override
        public FindFriendViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {

            View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.users_display_layout_small, viewGroup, false);
            FindFriendViewHolder viewHolder = new FindFriendViewHolder(view);
            return viewHolder;
        }
    };
    adapter.startListening();
    FindFriendsRecyclerList.setAdapter(adapter);
    adapter.notifyDataSetChanged();
} 

Это заполняет мой обзор повторного просмотра пользователями и их расстоянием, т. Е. Насколько они далеко от меня. Но список составляется в том порядке, в котором он хранится в базе данных firebase, в результате список пользователей не сортируется по их расстоянию. Если пользователь A дальше от меня, чем пользователь B, но в базе данных он хранится выше пользователя B, то в выходных данных тоже пользователь A выше пользователя B. Ожидаемый вывод состоит в том, что пользователь B должен находиться выше пользователя A в представлении переработчика как его расстояние меньше, чем у пользователя A. Поэтому, соответственно, для всех пользователей следует проверять, кто ближе ко мне, и размещать их над теми, кто находится дальше, чем я, в основном сортировать их по расстоянию от меня.

1 Ответ

0 голосов
/ 07 января 2019

Адаптеры FirebaseUI будут отображать элементы в порядке, в котором их возвращает запрос. Нет встроенного способа переупорядочить элементы на стороне клиента.

Вы можете попробовать трюк getItem, показанный здесь: https://stackoverflow.com/a/40383539.

Но если это не сработает, вам придется реализовать собственный адаптер: firebaserecycleradapter сортировать / сравнивать / переупорядочивать данные перед заполнением .

...