После RecyclerView Swipe элементы не корректируют положение - PullRequest
0 голосов
/ 17 марта 2020

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

Мой адаптер для повторного просмотра:

public class ActiveClassAdapter extends FirestoreRecyclerAdapter<Student, ActiveClassAdapter.ActiveClassHolder> {

public ActiveClassAdapter(@NonNull FirestoreRecyclerOptions<Student> options) {
    super(options);
}

@Override
protected void onBindViewHolder(@NonNull ActiveClassHolder holder, int position, @NonNull Student model) {
    holder.textViewName.setText("" + model.getFirstName().trim() + " " + model.getLastName().trim());
    holder.textViewLevel.setText("" + model.getLevel());
}

@NonNull
@Override
public ActiveClassHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.student_item, parent, false);
    return new ActiveClassHolder(v);
}

public void deleteItem(int position){
    getSnapshots().getSnapshot(position).getReference().delete();
}

public boolean isEmpty(){
    if(getItemCount() == 0)
        return true;
    else
        return false;
}

public class ActiveClassHolder extends RecyclerView.ViewHolder{
    TextView textViewName;
    TextView textViewLevel;
    public ActiveClassHolder(@NonNull View itemView) {
        super(itemView);
        textViewLevel = itemView.findViewById(R.id.text_view_studentLevel);
        textViewName = itemView.findViewById(R.id.text_view_studentName);
    }
}

}

Код для настройки моего просмотра:

private void setUpRecyclerView() {
    Query query = activeRef.orderBy("level").orderBy("lastName", Query.Direction.DESCENDING);

    FirestoreRecyclerOptions<Student> options = new FirestoreRecyclerOptions.Builder<Student>()
            .setQuery(query, Student.class).build();
    adapter = new ActiveClassAdapter(options);
    final RecyclerView recyclerView = findViewById(R.id.active_recycler_view);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setAdapter(adapter);

    new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) {
        @Override
        public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
            return false;
        }

        @Override
        public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
            int position = viewHolder.getAdapterPosition();
            adapter.deleteItem(position);
            adapter.notify();
        }
    }).attachToRecyclerView(recyclerView);
}

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Попробуйте это:

notifyItemRemoved(position)

Или просто следуйте этому примеру: https://medium.com/@kitek / recyclerview-swipe-to-delete-проще-чем-вы-думали cff67ff5e5f6

0 голосов
/ 17 марта 2020

Попробуйте использовать adapter.notifyItemRemoved(); после удаления элемента.

...