RecyclerView 点击 并删除Item

运用RecyclerView 没有ListView方便的一点就是  点击必须进行接口回调!

话不多说  直接上代码

 

首先是Adapter

public class MyAdapter extends RecyclerView.Adapter implements View.OnClickListener {
    Context context;
    List data;
    private OnMyItemClickListener onMyItemClickListener;//定义的接口
    private RecyclerView recyclerView;                  //定义一个RecyclerView

    public MyAdapter(Context context, List data) {
        this.context = context;
        this.data = data;
    }
    //接口的setget方法 对外提供
    public void setOnMyItemClickListener(OnMyItemClickListener onMyItemClickListener) {
        this.onMyItemClickListener = onMyItemClickListener;
    }

    //Adapter绑定RecyclerView时
    @Override
    public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
        this.recyclerView = recyclerView;
    }
    //Adapter解除绑定RecyclerView时
    @Override
    public void onDetachedFromRecyclerView(@NonNull RecyclerView recyclerView) {
        super.onDetachedFromRecyclerView(recyclerView);
        this.recyclerView = null;
    }
    //创建ViewHolder
    @NonNull
    @Override
    public OneAdapter onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        OneAdapter oneAdapter;
        View view = LayoutInflater.from(context).inflate(R.layout.layout_list, viewGroup, false);
        view.setOnClickListener(this);//设置接口的实现方法
        oneAdapter = new OneAdapter(view);
        return oneAdapter;
    }
    //绑定试图
    @Override
    public void onBindViewHolder(@NonNull OneAdapter oneAdapter, int i) {
        Picasso.get().load(data.get(i).getIcon()).into(oneAdapter.imageView);
        oneAdapter.textView.setText(data.get(i).getName());
    }

    @Override
    public int getItemCount() {
        return data.size();
    }
    //实现接口的点击方法
    @Override
    public void onClick(View view) {
             if (recyclerView != null && onMyItemClickListener != null) {
                int position = recyclerView.getChildAdapterPosition(view);
                onMyItemClickListener.onMyItemClick(recyclerView,view,position,"");
            }

    }

    class OneAdapter extends RecyclerView.ViewHolder {
        ImageView imageView;
        TextView textView;
        public OneAdapter(@NonNull View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.list_image);
            textView = itemView.findViewById(R.id.list_text);
        }
    }

    // 接口回调
    public interface OnMyItemClickListener{
        void onMyItemClick(RecyclerView parent, View view, int position, String data);
    }
    //进行删除
    public void remove(int position){
        data.remove(position);
        //notifyDataSetChanged();// 提醒list刷新,没有动画效果
        notifyItemRemoved(position); // 提醒item删除指定数据,这里有RecyclerView的动画效果
    }

}

 

 

然后Activity

 myAdapter.setOnMyItemClickListener(new MyAdapter.OnMyItemClickListener() {
                    @Override
                    public void onMyItemClick(RecyclerView parent, View view, int position, String data) {
                        Toast.makeText(MainActivity.this, "您删除了第"+position+"条数据", Toast.LENGTH_SHORT).show();
                        myAdapter.remove(position);
                    }
                });

 

你可能感兴趣的:(RecyclerView 点击 并删除Item)