Как отсортировать список на ItemMove с помощью Firebase - PullRequest
0 голосов
/ 02 сентября 2018

Как вы сортируете список, когда перемещаете элемент в списке и сохраняете эту позицию?

Я добавил int "listOrder" в мой объект, чтобы я мог сохранить позицию, но в настоящее время переменная не изменяется должным образом. Вот код, который я имею наItemMove:

@Override
    public boolean onItemMove(int fromPosition, int toPosition) {
        Collections.swap(mHabitosList, fromPosition, toPosition);

        Habitos habitosFromPosition = mHabitosList.get(fromPosition);
        Habitos habitosToPostion = mHabitosList.get(toPosition);

        String fromPositionTableName = habitosFromPosition.getHabitosId();
        String toPositionTableName = habitosToPostion.getHabitosId();

        DatabaseReference fromPositionRef = habitosReference.child(fromPositionTableName);
        DatabaseReference toPositionRef = habitosReference.child(toPositionTableName);

        HashMap<String, Object> updateFromPositionOrderNumber = new HashMap<>();
        updateFromPositionOrderNumber.put("listOrder", toPosition);
        fromPositionRef.updateChildren(updateFromPositionOrderNumber);

        HashMap<String, Object> updateToPositionOrderNumber = new HashMap<>();
        updateToPositionOrderNumber.put("listOrder", fromPosition);
        toPositionRef.updateChildren(updateToPositionOrderNumber);

        notifyItemMoved(fromPosition, toPosition);
        return true;
    }

И когда представление связано, я добавил опцию для добавления значения listOrder.

     public void onBindViewHolder(@NonNull MyViewHolder holder, int position){
final Habitos habitos = mHabitosList.get(position);

 habitosReference.child(habitos.getHabitosId()).child("listOrder").setValue(position);

}

А в FirebaseListener я добавил опцию сортировки значений по «listOrderChild»

Query habitosQuery = mHabitosDatabase.orderByChild("listOrder");

habitosQuery.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                mHabitosList.clear();
                    for (DataSnapshot habitosSnapshot : dataSnapshot.getChildren()) {
                        Habitos habitos = habitosSnapshot.getValue(Habitos.class);

                        mHabitosList.add(habitos);
                        mHabitosAdapter.notifyDataSetChanged();
                    }
                }

            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });
    }

Я везде оглядывался, но не нашел краткого ответа на эту проблему, любая помощь будет высоко оценена!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...