RecyclerView适配器加点击长按事件

RecyclerView多条目里面包含了点击和长按事件 ,事件是在onBindViewHolder中的

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    private Context context;
    private List<ShowBean.DataBeanX.DataBean> data;
    private int TYPE_one = 0;
    private int TYPE_two = 1;

    //定义接口
    //长按时间
    public interface OnReItemLongClickLisenter {
        void OnReItemLongClick(View view, int position);
    }

    //点击事件
    public interface OnReItemOnclickLisenter {
        void OnReItemOnclick(View view, int position);

    }

    //声明长按接口
    private OnReItemLongClickLisenter longClickLisenter;
    //声明点击接口
    private OnReItemOnclickLisenter clickLisenter;

    //长按时间
    public void setOnReItemLongClickLisenter(OnReItemLongClickLisenter longClickLisenter) {

        this.longClickLisenter = longClickLisenter;
    }

    //点击事件


    public void setOnReItemOnclickLisenter(OnReItemOnclickLisenter clickLisenter) {
        this.clickLisenter = clickLisenter;
    }

    public MyAdapter(Context context, List<ShowBean.DataBeanX.DataBean> data) {
        this.context = context;
        this.data = data;
    }

    @Override
    public int getItemViewType(int position) {
        //0 1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 17 18 19 20
//        int i = 1;
//        i++;

        if (position == 0 || position % 4 == 0) {
            return TYPE_two;
        } else {
            return TYPE_one;
        }
    }




    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int type) {


        if (type == TYPE_one) {
            View view1 = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item1, null, false);

            MyViewHolder myViewHolder = new MyViewHolder(view1);


            return myViewHolder;
        } else {
            View view2 = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item2, null, false);

            MyViewHolder myViewHolder2 = new MyViewHolder(view2);


            return myViewHolder2;
        }
        //长按点击删除


    }

    @Override
    public void onBindViewHolder(@NonNull final MyViewHolder myViewHolder, int i) {

        int type = getItemViewType(i);
        
        if (type == TYPE_one) {
            ShowBean.DataBeanX.DataBean dataBean = data.get(i);
            String title = dataBean.getTitle();
            String style = dataBean.getStyle();
            List<String> pics = dataBean.getPics();
            myViewHolder.id1.setText(style);
            myViewHolder.title1.setText(title);
            Glide.with(context).load("http://365jia.cn/uploads/" + pics).into(myViewHolder.picture1);

        } else {
            ShowBean.DataBeanX.DataBean dataBean = data.get(i);
            String title = dataBean.getTitle();
            String style = dataBean.getStyle();
            List<String> pics = dataBean.getPics();

            myViewHolder.style2.setText(style);
            myViewHolder.title2.setText(title);
            Glide.with(context).load("http://365jia.cn/uploads/" + pics).into(myViewHolder.picture2);

        }
        //
        myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int layoutPosition = myViewHolder.getLayoutPosition();
                View itemView = myViewHolder.itemView;
                if (clickLisenter != null) {
                    clickLisenter.OnReItemOnclick(itemView, layoutPosition);

                }

            }
        });

        myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                int adapterPosition = myViewHolder.getAdapterPosition();
                View itemView = myViewHolder.itemView;
                if (longClickLisenter != null) {
                    longClickLisenter.OnReItemLongClick(itemView, adapterPosition);

                }
                return true;
            }
        });


    }

    @Override
    public int getItemCount() {
        return data.size();
    }


    public class MyViewHolder extends RecyclerView.ViewHolder {

        private final ImageView picture1;
        private final TextView id1;
        private final TextView title1;
        private final TextView title2;
        private final TextView style2;
        private final ImageView picture2;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            //布局1
            title1 = itemView.findViewById(R.id.i1_title);
            id1 = itemView.findViewById(R.id.i1_id);
            picture1 = itemView.findViewById(R.id.i1_picture);
            //布局2
            title2 = itemView.findViewById(R.id.i2_title);
            style2 = itemView.findViewById(R.id.i2_style);
            picture2 = itemView.findViewById(R.id.i2_picture);
        }
    }


}

里面定义好点击事件后怎么用

 adapter.setOnReItemOnclickLisenter(new MyAdapter.OnReItemOnclickLisenter() {
                @Override
                public void OnReItemOnclick(View view, int position) {
                    Toast.makeText(MainActivity.this, "点击", Toast.LENGTH_SHORT).show();

                }
            });

            adapter.setOnReItemLongClickLisenter(new MyAdapter.OnReItemLongClickLisenter() {
                @Override
                public void OnReItemLongClick(View view, int position) {
                    data.remove(position);
                    adapter.notifyDataSetChanged();
                    Toast.makeText(MainActivity.this, "长按删除!", Toast.LENGTH_SHORT).show();
                }
            });

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
RecyclerView中,要实现按删除功能,需要以下步骤: 1. 在RecyclerView适配器中,实现事件监听接口OnItemLongClickListener,代码如下: ``` public interface OnItemLongClickListener { void onItemLongClick(View view, int position); } private OnItemLongClickListener mOnItemLongClickListener; public void setOnItemLongClickListener(OnItemLongClickListener listener) { this.mOnItemLongClickListener = listener; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_layout, parent, false); final MyViewHolder viewHolder = new MyViewHolder(itemView); itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { if (mOnItemLongClickListener != null) { mOnItemLongClickListener.onItemLongClick(v, viewHolder.getAdapterPosition()); } return true; } }); return viewHolder; } ``` 2. 在RecyclerView的Activity或Fragment中,实现OnItemLongClickListener接口,并在onCreate方法中设置适配器按监听器,代码如下: ``` mRecyclerView.setAdapter(mAdapter); mAdapter.setOnItemLongClickListener(new MyAdapter.OnItemLongClickListener() { @Override public void onItemLongClick(View view, int position) { // 在此处处理按删除操作 mAdapter.removeItem(position); } }); ``` 3. 在适配器中添删除数据的方法removeItem(int position),代码如下: ``` public void removeItem(int position) { mDatas.remove(position); notifyItemRemoved(position); } ``` 这样,当用户按某个RecyclerView的item时,就会弹出删除确认框,用户确认后,该item就会被删除。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值