单击删除图像图标从 recyclerView 中删除所选项目
remove selected item from recyclerView on click delete image icon
我想从 recyclerView 列表中删除所选项目。
在我的列表中,每行都有删除图像图标,我想在单击删除图像图标时删除项目。怎么办?
我的适配器代码这是看我的代码如何做到的:
谢谢
public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ItemViewHolder>{
private Context context;
private List<Items> items=new ArrayList<>();
public ListAdapter(Context context){
this.context=context;
}
@Override
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater layoutInflater=LayoutInflater.from(context);
View view=layoutInflater.inflate(R.layout.item,parent,false);
return new ItemViewHolder(view);
}
@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
holder.bindItem(items.get(position));
}
@Override
public int getItemCount() {
return items.size();
}
public class ItemViewHolder extends RecyclerView.ViewHolder{
private TextView titleTextView;
private ImageView editIcon;
private ImageView deleteIcon;
public ItemViewHolder(View itemView) {
super(itemView);
titleTextView =itemView.findViewById(R.id.item_title);
editIcon=itemView.findViewById(R.id.item_edit);
deleteIcon=itemView.findViewById(R.id.item_delete);
}
public void bindItem(Items item){
titleTextView.setText(item.getTitle());
}
public void removeItem(int position){
items.remove(position);
notifyItemRemoved(position);
}
}
public void addItem(Items item){
items.add(item);
notifyItemInserted(items.size()-1);
}
}
试试下面的代码
public ItemViewHolder(View itemView) {
super(itemView);
titleTextView =itemView.findViewById(R.id.item_title);
editIcon=itemView.findViewById(R.id.item_edit);
deleteIcon=itemView.findViewById(R.id.item_delete);
// put this code
deleteIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
removeItem(getAdapterPosition())
}
});
}
上面的答案可以解决问题,但最好使用接口回调来实现更容易的实现和代码模块化。下面是我喜欢编写的用于从 activity 中删除列表项的代码。在这种方法中,您不必更改适配器 class 的太多代码,如果您想做更复杂的事情,例如:仅当从 firebase 数据库中删除元素时才删除列表元素,此方法可以完美地完成这项工作。
这是一个代码片段
new DeclinedClickListener() {
@Override
public void declinedClick(int position, View v) {
fbDB.getReference("news_requests").child(articles.get(position).getNewsID()).removeValue(new DatabaseReference.CompletionListener() {
@Override
public void onComplete(@Nullable DatabaseError databaseError, @NonNull DatabaseReference databaseReference) {
articles.remove(position);
if(article_req_rv.getAdapter()!=null) {
article_req_rv.getAdapter().notifyDataSetChanged();
}
}
});
你为它做一个界面
public interface DeclinedClickListener {
void declinedClick(int position, View v);
}
在recyclerview中使用这个界面
holder.declined_btx.setOnClickListener(l->{
declinedClickListener.declinedClick(position,l);
});
我想从 recyclerView 列表中删除所选项目。 在我的列表中,每行都有删除图像图标,我想在单击删除图像图标时删除项目。怎么办? 我的适配器代码这是看我的代码如何做到的: 谢谢
public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ItemViewHolder>{
private Context context;
private List<Items> items=new ArrayList<>();
public ListAdapter(Context context){
this.context=context;
}
@Override
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater layoutInflater=LayoutInflater.from(context);
View view=layoutInflater.inflate(R.layout.item,parent,false);
return new ItemViewHolder(view);
}
@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
holder.bindItem(items.get(position));
}
@Override
public int getItemCount() {
return items.size();
}
public class ItemViewHolder extends RecyclerView.ViewHolder{
private TextView titleTextView;
private ImageView editIcon;
private ImageView deleteIcon;
public ItemViewHolder(View itemView) {
super(itemView);
titleTextView =itemView.findViewById(R.id.item_title);
editIcon=itemView.findViewById(R.id.item_edit);
deleteIcon=itemView.findViewById(R.id.item_delete);
}
public void bindItem(Items item){
titleTextView.setText(item.getTitle());
}
public void removeItem(int position){
items.remove(position);
notifyItemRemoved(position);
}
}
public void addItem(Items item){
items.add(item);
notifyItemInserted(items.size()-1);
}
}
试试下面的代码
public ItemViewHolder(View itemView) {
super(itemView);
titleTextView =itemView.findViewById(R.id.item_title);
editIcon=itemView.findViewById(R.id.item_edit);
deleteIcon=itemView.findViewById(R.id.item_delete);
// put this code
deleteIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
removeItem(getAdapterPosition())
}
});
}
上面的答案可以解决问题,但最好使用接口回调来实现更容易的实现和代码模块化。下面是我喜欢编写的用于从 activity 中删除列表项的代码。在这种方法中,您不必更改适配器 class 的太多代码,如果您想做更复杂的事情,例如:仅当从 firebase 数据库中删除元素时才删除列表元素,此方法可以完美地完成这项工作。 这是一个代码片段
new DeclinedClickListener() {
@Override
public void declinedClick(int position, View v) {
fbDB.getReference("news_requests").child(articles.get(position).getNewsID()).removeValue(new DatabaseReference.CompletionListener() {
@Override
public void onComplete(@Nullable DatabaseError databaseError, @NonNull DatabaseReference databaseReference) {
articles.remove(position);
if(article_req_rv.getAdapter()!=null) {
article_req_rv.getAdapter().notifyDataSetChanged();
}
}
});
你为它做一个界面
public interface DeclinedClickListener {
void declinedClick(int position, View v);
}
在recyclerview中使用这个界面
holder.declined_btx.setOnClickListener(l->{
declinedClickListener.declinedClick(position,l);
});