实现RecyclerView的监听

RecyclerView要想事项响应时间,需要自定义监听器
实现RecyclerView响应事件分四步:
1.声明一个接口,定义相应事件方法
需要创建一个接口类,定义点击事件的回调

    public interface OnRVitemClickListener {
//    定义点击事件的回调
    void onItemClick(int pos);

}
 **2.在RecyclerView的Adapter内来维护(声明)一个接口对象**
//        声明一个监听器对象
        private OnRVitemClickListener onRVitemClickListener;
//        提供一个方法
        public void setOnRVitemClickListener(OnRVitemClickListener onRVitemClickListener){
            this.onRVitemClickListener = onRVitemClickListener;
        }
 **3.在OnBindViewHolder方法中对item设置点击事件监听,并将事件传递给接口对象**
holder.itemView.setOnClickListener(new View.OnClickListener(){

                @Override
                public void onClick(View view) {
//                    获取点击的位置
                    int pos = holder.getLayoutPosition();
//                    传递点击位置
                    onRVitemClickListener.onItemClick(pos);
                }
            });
 4.在mainActivity中实现接口,并重写方法,实现内容
     @Override
    public void onItemClick(int pos) {
        Log.e("位置信息",pos+"");
    }

详细代码示例:

public class MainActivity extends AppCompatActivity implements OnRVitemClickListener {

//    recycleView使用步骤
//    1.添加依赖,file--project  structure--app---dependencies
//    2.在布局文件中添加一个recycleview
//    3.创建一个布局文件,用于给每一个Item布局
//    4.声明属性,并与布局文件中的控件进行绑定
//    5.设置一个布局管理器

//    声明recyclerview对象
    private RecyclerView recyclerView;
//    声明一个数据集合
    private List<Map<String,Object>> mList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = (RecyclerView) findViewById(R.id.recycleview);
//       5. 设置一个布局管理器
//        线性布局管理器
//        recyclerView.setLayoutManager(new LinearLayoutManager(this));
//        表格布局管理器
//        recyclerView.setLayoutManager(new GridLayoutManager(this,2));
//        瀑布流布局管理器
        recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL));
//        9.产生数据,在适配器代码前面
        createData();
//      6.创建适配器
        MyAdapter adapter = new MyAdapter();
//        8.绑定适配器
        recyclerView.setAdapter(adapter);
//        给Adapter添加监听器
        adapter.setOnRVitemClickListener(this);
    }
    private void createData(){

        int[] a = {R.drawable.d1,R.drawable.d2,R.drawable.d3,R.drawable.d4,R.drawable.d5,R.drawable.d6,R.drawable.d7,R.drawable.d8,R.drawable.d9,R.drawable.d10,R.drawable.d11,R.drawable.d12,R.drawable.d13,R.drawable.d14,R.drawable.d15,R.drawable.d16,R.drawable.c17,R.drawable.d18,R.drawable.c19,R.drawable.c20};
        mList = new ArrayList<>();
        for (int i =0;i<20;i++){
            Map map = new HashMap();
            map.put("image",a[i]);
//            map.put("text","乌贼"+i);
            mList.add(map);
        }

    }

    @Override
    public void onItemClick(int pos) {
        Log.e("位置信息",pos+"");
    }

    //        6.创建适配器
    class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
//        声明一个监听器对象
        private OnRVitemClickListener onRVitemClickListener;
//        提供一个方法
        public void setOnRVitemClickListener(OnRVitemClickListener onRVitemClickListener){
            this.onRVitemClickListener = onRVitemClickListener;
        }


        //            当需要拿到viewholder的时候就会调用,返回值与之前给的泛型相同,在加载不同类型的布局的时候,
//            可以根据ViewType来创建不同的ViewHolder
//            ViewType是Item的布局类型
        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//                这里拿到布局文件
//            View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item,null);
            View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.simplelayout,null);
//                根据布局文件创建一个ViewHolder
            MyViewHolder viewholder = new MyViewHolder(view);
            return viewholder;
        }
        //            当内容和布局进行绑定的时候,回调这个方法
//            每当有新数据进入屏幕的时候,也会回调这个方法
//            参数holder和ViewHolder类型与泛型所规定的类型相同,参数position代表的是该item的位置
//            可以通过position来获取对应的数据
        @Override
        public void onBindViewHolder(final MyViewHolder holder, int position) {
//                从数据列表中获取到数据
//            String text = mList.get(position).get("text").toString();
            int img = (int) mList.get(position).get("image");
//                将数据设置到界面上
//            holder.textview.setText(text);
            holder.imageView.setImageResource(img);
            holder.itemView.setOnClickListener(new View.OnClickListener(){

                @Override
                public void onClick(View view) {
//                    获取点击的位置
                    int pos = holder.getLayoutPosition();
//                    传递点击位置
                    onRVitemClickListener.onItemClick(pos);
                }
            });


        }
//      返回数据的个数

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

        //        7.创建ViewHolder
        class MyViewHolder extends RecyclerView.ViewHolder{
//            TextView textview;
            ImageView imageView;
            public MyViewHolder(View itemView) {
                super(itemView);
//                进行控件关联
//                textview = (TextView) itemView.findViewById(R.id.textview);
                imageView = (ImageView) itemView.findViewById(R.id.imageview2);
            }
        }
    }

}

接口


public interface OnRVitemClickListener {
//    定义点击事件的回调
    void onItemClick(int pos);

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值