如何从另一个 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了).
我在底部有一个 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了).