Android 用接口来给RecyclerView的item添加监听事件

此前我添加item的监听事件是直接在Adapter里面的onCreate方法中直接holder.view.setOnClickListener(new OnClickListener){};
此方法是学的郭霖的第二行代码。

后面在hongyang的博客学的下面这个方法:

    public interface OnItemClickListener {
        void onItemClick(View v,int position);
    }

    public interface OnItemLongClickListener {
        void onItemLongClick(View v,int position);
    }

    private OnItemClickListener onItemClickListener;
    private OnItemLongClickListener onItemLongClickListener;

第一步:分别写两个public的接口,接口里面放方法,方法的参数注意了,一个是View一个是int,int 用来记录position。
第二步:引用两个private的接口。

    public void setOnItemClickListener(OnItemClickListener listener){
        onItemClickListener= listener;
    }
    public void setOnItemLongClickListener(OnItemLongClickListener listener){
        onItemLongClickListener=listener;
    }

第三步:添加两个public的方法,供调用者调用,参数放接口进去,这样的效果是:只要调用者调用了这个方法,我们就强迫调用者去实现我们参数里面放的这个接口。

    @Override
    public void onBindViewHolder(final MyViewHolder holder, int position) {
        if (getItemViewType(position) == NORMAL_VIEW) {
            holder.textView.setText(list.get(position));
            if (onItemClickListener!=null){
                holder.textView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        onItemClickListener.onItemClick(holder.itemView,holder.getLayoutPosition());
                    }
                });
            }
            if (onItemLongClickListener!=null){
                holder.textView.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View view) {
                        onItemLongClickListener.onItemLongClick(holder.itemView,holder.getLayoutPosition());
                        return false;
                    }
                });
            }
        }
    }

第四步:在onBind方法里面,先来一个if来判断我们的接口是不是null,是null,跳过,不是null,说明被实现了,进入,开始设置监听方法,具体的代码。

现在可以跑回Activity里面去设置监听了!

adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View v, int position) {
                Toast.makeText(MainActivity.this,"the number"+position+"has been clicked",Toast.LENGTH_SHORT).show();
            }
        });
        adapter.setOnItemLongClickListener(new MyAdapter.OnItemLongClickListener() {
            @Override
            public void onItemLongClick(View v, int position) {
                list.remove(position);
                adapter.notifyItemRemoved(position);
                 Toast.makeText(MainActivity.this,"the number"+position+"has been removed",Toast.LENGTH_SHORT).show();
            }
        });
~

你可能感兴趣的:(Android 用接口来给RecyclerView的item添加监听事件)