Как вы сортируете список, когда перемещаете элемент в списке и сохраняете эту позицию?
Я добавил 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) {
}
});
}
Я везде оглядывался, но не нашел краткого ответа на эту проблему, любая помощь будет высоко оценена!