单击删除图像图标时从 recyclerView 中删除所选项目

问题描述 投票:0回答:2

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


}
android android-recyclerview android-adapter
2个回答
3
投票

尝试下面的代码

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())
            }
        });
    }

0
投票

上面的答案可以完成这项工作,但是使用接口回调总是更好,这样可以更轻松地实现和代码模块化。下面是我喜欢编写的用于从活动中删除列表项的代码。在此方法中,您不必更改适配器类的太多代码,并且如果您想要执行更复杂的操作,例如:仅当从 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);
});
© www.soinside.com 2019 - 2024. All rights reserved.