Recycleview 点击事件

最终目的

模拟ListView的setOnItemClickListener()方法,调用者只须调用类似于setOnItemClickListener的东西就能获得被点击item的相关数据。

原理

为RecyclerView的每个子item设置setOnClickListener,然后在onClick中再调用一次对外封装的接口,将这个事件传递给外面的调用者。而“为RecyclerView的每个子item设置setOnClickListener”在Adapter中设置。其实直接在onClick中也能完全处理item的点击事件,但是这样会破坏代码的逻辑。

步骤如下  

首先在对应的适配器里面自定义接口    对应的点击 和长安点击

  public OnItemClickListener mOnItemClickListener;

    public interface OnItemClickListener{
        void onClick( int position);
        void onLongClick( int position);
    }
    public void setOnItemClickListener(OnItemClickListener onItemClickListener ){
        this. mOnItemClickListener=onItemClickListener;
    }

在对应的适配器的 
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {}方法里面 进行 判断
 
 
        if( mOnItemClickListener!= null){
            holder.itemView.setOnClickListener( new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mOnItemClickListener.onClick(position);
                }
            });
            holder.itemView.setOnLongClickListener( new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    mOnItemClickListener.onLongClick(position);
                    return false;
                }
            });
        }
最后 在对应的MainActivity里面进行 调用
 
 
  homeadper.setOnItemClickListener(new HomeAdaper.OnItemClickListener() {
            @Override
            public void onClick(int position) {
                Toast.makeText(MainActivity.this,"您点击了"+position+"行",Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onLongClick(int position) {
                Toast.makeText(MainActivity.this,"您长按点击了"+position+"行",Toast.LENGTH_SHORT).show();
            }
        });

为了方便大家 我把适配器 和MainActivity 复制到下方 ,提供给大家参考
适配器  
public class HomeAdaper extends RecyclerView.Adapter{
    Context context;
    List<News.ResultBean> list;

    public OnItemClickListener mOnItemClickListener;

    public interface OnItemClickListener{
        void onClick( int position);
        void onLongClick( int position);
    }
    public void setOnItemClickListener(OnItemClickListener onItemClickListener ){
        this. mOnItemClickListener=onItemClickListener;
    }



    public HomeAdaper(Context context, List<News.ResultBean> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
         MyViewHolder holder = new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.recycle,parent,false));
        return holder;
    }

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
        MyViewHolder holder1 = (MyViewHolder) holder;

        holder1.tv1.setText(list.get(position).getMarketName());
        holder1.tv2.setText( list.get(position).getHigh()+"");
        holder1.tv3.setText(list.get(position).getLow()+"");
        holder1.tv4.setText( list.get(position).getLast()+"");
        holder1.tv5.setText( list.get(position).getVolume()+"");


        if( mOnItemClickListener!= null){
            holder.itemView.setOnClickListener( new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mOnItemClickListener.onClick(position);
                }
            });
            holder.itemView.setOnLongClickListener( new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    mOnItemClickListener.onLongClick(position);
                    return false;
                }
            });
        }


    }



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





    class   MyViewHolder extends RecyclerView.ViewHolder{

        TextView tv1,tv2,tv3,tv4,tv5;


        public MyViewHolder(View itemView) {
            super(itemView);
            tv1 = (TextView) itemView.findViewById(R.id.tv1);
            tv2 = (TextView) itemView.findViewById(R.id.tv2);
            tv3 = (TextView) itemView.findViewById(R.id.tv3);
            tv4 = (TextView) itemView.findViewById(R.id.tv4);
            tv5= (TextView) itemView.findViewById(R.id.tv5);

        }
    }
}

MainActivity 页面
public class MainActivity extends AppCompatActivity implements IView {
    RecyclerView recycler;
    HomeAdaper homeadper;
    UserPresenter userPresenter;
    List<News.ResultBean> list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recycler = (RecyclerView)findViewById(R.id.recylce);
        recycler.setLayoutManager(new LinearLayoutManager(this));
        userPresenter = new UserPresenter(this);
        userPresenter.getUser(Api.HOME_URL);
    }


    @Override
    public void getNews(ArrayList<News.ResultBean> list) {
        recycler.setAdapter(homeadper =new HomeAdaper(MainActivity.this,list));
        homeadper.setOnItemClickListener(new HomeAdaper.OnItemClickListener() {
            @Override
            public void onClick(int position) {
                Toast.makeText(MainActivity.this,"您点击了"+position+"行",Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onLongClick(int position) {
                Toast.makeText(MainActivity.this,"您长按点击了"+position+"行",Toast.LENGTH_SHORT).show();
            }
        });

    }
}



 
 
 
 
 
 


猜你喜欢

转载自blog.csdn.net/bbtianshi/article/details/79744349