简体   繁体   English

FirestoreRecyclerView 滑动 CardView 删除文档

[英]FirestoreRecyclerView Swipe CardView to Delete the Document

I have the following code inside onStart() method of a Fragment:我在片段的 onStart() 方法中有以下代码:

final FirestoreRecyclerAdapter adapter = new FirestoreRecyclerAdapter<NewTask, TasksViewHolder>(options) {
        @Override
        protected void onBindViewHolder(@NonNull final TasksViewHolder holder, final int position, @NonNull NewTask model) {
            holder.setTaskTitle(model.getTaskTitle());
            holder.setTaskPrivacy(model.isTaskPrivacy());
            holder.setTaskColor(model.getTaskColor());

            //<-----  ONCLICK OF A TASK  ----->
            holder.mView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    final DocumentReference ref = getSnapshots().getSnapshot(position).getReference();
                    Toast.makeText(getActivity(), ref.getId(), Toast.LENGTH_SHORT).show();
                    new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT | ItemTouchHelper.LEFT) {
                        @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) {
                            Toast.makeText(getActivity(), ref.getId(), Toast.LENGTH_SHORT).show();
                        }
                    }).attachToRecyclerView(twoRecyclerView);
                }
            });
        }

With the provided code this happens:使用提供的代码会发生这种情况:

When I click the CardView item, pops a Toast message of that item's Firestore document Id.当我单击 CardView 项目时,弹出该项目的 Firestore 文档 ID 的 Toast 消息。 But when I swipe the item, pops a Toast message of the first item that has been previously clicked.但是,当我滑动该项目时,会弹出一条关于先前已单击的第一个项目的 Toast 消息。 So If I try to delete an item inside onSwipe method I will constantly delete the first chosen item.因此,如果我尝试在 onSwipe 方法中删除一个项目,我将不断删除第一个选择的项目。

My question is: How can I delete the items I want inside onSwipe?我的问题是:如何在 onSwipe 中删除我想要的项目?

My main goal is to be able to delete the CardView item when they're swiped towards right or left, it doesn't have to be when that item is clicked.我的主要目标是能够在向右或向左滑动时删除 CardView 项目,而不必在单击该项目时删除。

After couple hours of turning pages I figured out the best way to set up a "Swipe to delete a CardView item from Firestore function" in a Fragment is to do it creating a new Adapter Java class.经过几个小时的翻页,我想出了在片段中设置“滑动以从 Firestore 函数中删除 CardView 项目”的最佳方法是创建一个新的 Adapter Java 类。

public class NoteAdapter extends FirestoreRecyclerAdapter<Note, NoteAdapter.NoteHolder> {

public NoteAdapter(@NonNull FirestoreRecyclerOptions<Note> options) {
    super(options);
}

@Override
protected void onBindViewHolder(@NonNull NoteHolder holder, int position, @NonNull Note model) {
    holder.textViewTitle.setText(model.getTitle());
    holder.textViewDescription.setText(model.getDescription());
    holder.textViewPriority.setText(String.valueOf(model.getPriority()));
}

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

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

class NoteHolder extends RecyclerView.ViewHolder {
    TextView textViewTitle;
    TextView textViewDescription;
    TextView textViewPriority;

    public NoteHolder(View itemView) {
        super(itemView);
        textViewTitle = itemView.findViewById(R.id.text_view_title);
        textViewDescription = itemView.findViewById(R.id.text_view_description);
        textViewPriority = itemView.findViewById(R.id.text_view_priority);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM