如何从另一个 class 的 Recycler View 中删除项目?

How to delete items from Recycler View from another class?

我在底部有一个 Recycler 视图 Sheet ,如果单击该项目,它将显示在 Fragment 中。

在我的 Fragment 中,我有一个删除按钮(用于删除项目)。如何调用list.remove(position);?

删除按钮方法:

buttonDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (view == buttonDelete){
                    switchCardAdapter.deleteMethod(1);
                }
            }
        });

1 only dummy position , how do i get a real position from adapter?

删除适配器内的方法:

public void deleteMethod(int position) {
        cards.remove(position);
    }

完整的 BindViewHolder 方法:

@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int 
position) {
       final Card card = cards.get(position); 
       holder.textNumber.setText(String.valueOf(card.getNumberCard()));
       holder.textName.setText(card.getName());
       holder.itemView.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view) {
                Bundle b = new Bundle();
                b.putString("name", card.getName());
                b.putString("description", card.getDescripton());
                b.putString("type", card.getType());
                b.putLong("numberCard", card.getNumberCard());
                b.putInt("cvv",card.getCvv());
                b.putInt("exp", card.getExp());
                b.putInt("pin", card.getPin());
                cardFragment.setDataCard(b);
                bottomSheetFragment.dismiss();
        }
    });
}

public void deleteMethod(int position) {
    cards.remove(position);
}

如有任何帮助,我们将不胜感激。

你的adapter应该在它的数据源发生变化时得到通知,如

public void deleteMethod(int position) {
    cards.remove(position);
    notifyDataSetChanged();
}

或更高效

public void deleteMethod(int position) {
        cards.remove(position);
        notifyItemRemoved(position);
        //enables smooth animations and also updates data
        notifyItemRangeChanged(position, getItemCount());
}

点击item时,传递bundle中的position,在cardfragment中使用删除

            b.putInt("position", position);//add this
            cardFragment.setDataCard(b);
            bottomSheetFragment.dismiss();

然后,deleteButton onclick,

buttonDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (view == buttonDelete){
                    switchCardAdapter.deleteMethod(bundle.getInt("position));
                }
            }
        });
public void deleteMethod(int position) {
        cards.remove(position);
        adapter.notifyItemRemoved(position)
    }

据我了解,您的代码流程应该如下所示:

您从一个片段中打开了 1 个底部 sheet,其中包含 RV 物品。现在,当用户点击 RV 项目时,您已经打开了来自 "Card fragment" 的新片段并关闭了底部 sheet。在新片段中,您已经传递了包数据。在 card Fragment 中,您有删除按钮,可以从卡片列表中删除项目。

所以从你的卡片片段使用界面,你必须从你打开底部的地方通知你的第一个片段sheet。在此片段中,您必须从卡片列表中删除该特定项目。 (您必须将位置从卡片片段传递到第一个片段才能从列表中删除)。

现在您的卡列表已更新。您可以使用新更新的列表再次打开 Bottom sheet。 (之前在onbindViewHolder,你已经dismiss了).