RecyclerView的学习笔记

RecyclerViewAndroid一个更强大的控件,其不仅可以实现和ListView同样的效果,还有优化了ListView中的各种不足。

RecyclerView可以实现数据纵向滚动,也可以实现横向滚动ListView做不到横向滚动

 

RecyclerView 基本用法:

1、添加依赖库

因为RecyclerView属于新增的控件,AndroidRecyclerView定义在support库里。若要使用RecyclerView,第一步是要在build.gradle中添加对应的依赖库:

2、在xml布局文件中使用控件

由于RecyclerView不是内置在系统SDK中,需要把其完整的包名路径写出来:

3、布局管理器

Recycler View有三种布局管理器,分别是:线性、网格、交错网格;设置布局管理器使用 setLayoutManager() 方法。

//1、线性布局管理器
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
//默认为竖直排列,HORIZONTAL:横向滚动,需要将item里的布局长度固定,否则将会填充整个布局
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
recyclerView.setLayoutManager(linearLayoutManager); //线性
// 2、网格布局管理器,参数3:网格的列数
GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);
recyclerView.setLayoutManager(gridLayoutManager);//网格
// 3、交错网格布局管理器,参数第一个是布局的列数,第二个是布局的排列方向
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(staggeredGridLayoutManager);//交错网格布局

4、自定义适配器

1、定义类继承RecyclerView.ViewHolder类:用于绑定子项布局,并初始化控件。

public static class RecyclerViewHolder extends RecyclerView.ViewHolder {
        View view; 
        public ImageView imavPic; 
        public TextView tvUrl;

        public RecyclerViewHolder(View itemView) {
            super(itemView);
            view = itemView;
            imavPic = (ImageView) view.findViewById(R.id.imavPic);
            tvUrl = (TextView) view.findViewById(R.id.tvUrl);
        }
}

2、定义类继承RecyclerView.Adapter,重写onCreateViewHolder(),onBindViewHolder()getItemCount()三个方法。

  • onCreateViewHolder():用于创建ViewHolder实例,并把加载的布局传入到构造函数去,再把ViewHolder实例返回。
  • onBindViewHolder():用于对子项的数据进行赋值,会在每个子项被滚动到屏幕内时执行,position得到当前项的实例。
  • getItemCount():返回RecyclerView的子项数。
public class RecyclerAdapter extends android.support.v7.widget.RecyclerView.Adapter<RecyclerAdapter.RecyclerViewHolder> {

    int[] picUrls;
    Context c;

    public RecyclerAdapter(Context c, int[] picUrls) {
        this.picUrls = picUrls;
        this.c = c;
    }

    @Override
    public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_item, parent, false);
        final RecyclerViewHolder holder = new RecyclerViewHolder(v);
        return holder;
    }

    @Override
    public void onBindViewHolder(RecyclerViewHolder holder, int position) {
        holder.imavPic.setImageResource(picUrls[position]);
        holder.tvUrl.setText(picUrls[position]);
    }

    @Override
    public int getItemCount() { // 返回数据有多少条
        if (null == picUrls)
            return 0;
        return picUrls.length;
    }
}

3、点击事件

在自定义适配器类的onCreateViewHolder()方法中,为子项内控件添加点击事件。

        holder.view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int position = holder.getAdapterPosition();
                Toast.makeText(view.getContext(), "you clicked view " + position
                        , Toast.LENGTH_SHORT).show();
            }
        });

        holder.imavPic.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int position = holder.getAdapterPosition();
                Toast.makeText(view.getContext(), "you clicked image " + position
                        , Toast.LENGTH_SHORT).show();
            }
        });

 

 

~~~~~~~~~~~~~ 学习笔记,欢迎交流 ~~~~~~~~~~~~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值