【问题标题】:FirestoreRecyclerView Swipe CardView to Delete the DocumentFirestore RecyclerView 滑动 CardView 删除文档
【发布时间】:2019-11-28 11:51:00
【问题描述】:

我在 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);
                }
            });
        }

使用提供的代码会发生这种情况:

当我单击 CardView 项目时,会弹出该项目的 Firestore 文档 ID 的 Toast 消息。但是,当我滑动该项目时,会弹出先前单击的第一个项目的 Toast 消息。所以如果我尝试在 onSwipe 方法中删除一个项目,我会不断删除第一个选择的项目。

我的问题是:如何在 onSwipe 中删除我想要的项目?

我的主要目标是能够在向右或向左滑动 CardView 项目时删除它们,而不必在单击该项目时删除。

【问题讨论】:

    标签: java android android-recyclerview google-cloud-firestore


    【解决方案1】:

    经过几个小时的翻页后,我发现在 Fragment 中设置“滑动以从 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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多