《第一行代码》RecyclerView学习笔记
来源:互联网 发布:东方财富choice mac 编辑:程序博客网 时间:2024/06/03 23:14
1、使用
RecyclerView需要一个布局管理器和一个适配器
RecyclerView recyclerView=(RecyclerView)findViewById(R.id.recyclerView); LinearLayoutManager layoutManager=new LinearLayoutManager(this);//线性布局,还可以是其它布局吗? recyclerView.setLayoutManager(layoutManager); VegeAdapterSecond vegeAdapterSecond=new VegeAdapterSecond(vegetableList); recyclerView.setAdapter(vegeAdapterSecond);
适配器需要继承自RecyclerView.Adapter<>;创建一个ViewHolder内部类用于存储数据;
重写三个方法:
public ViewHolder onCreateViewHolder(ViewGroup parent,int viewType)
public void onBindViewHolder(ViewHolder viewHolder,int position)
public int getItemCount()
class VegeAdapterSecond extends RecyclerView.Adapter<VegeAdapterSecond.ViewHolder>{ private List<Vegetable> mVegeList; static class ViewHolder extends RecyclerView.ViewHolder{ ImageView imageView; TextView textView; public ViewHolder(View view){ super(view); imageView=(ImageView)view.findViewById(R.id.image_vege); textView=(TextView)view.findViewById(R.id.text_vege); } } public VegeAdapterSecond(List<Vegetable> vegetableList){ mVegeList=vegetableList; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent,int viewType){ View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.vege,parent,false); ViewHolder viewHolder=new ViewHolder(view); return viewHolder; } @Override public void onBindViewHolder(ViewHolder viewHolder,int position){ Vegetable vegetable=mVegeList.get(position); viewHolder.imageView.setImageResource(vegetable.getImageNum()); viewHolder.textView.setText(vegetable.getName()); } @Override public int getItemCount(){ return mVegeList.size(); }}
注意:若设置子项的宽高为match_parent,会导致在该方向上布满整个布局
2、适配器Adapter
引用自郭霖:http://blog.csdn.net/guolin_blog/article/details/44996879
其实说到底,控件就是为了交互和展示数据用的,只不过ListView更加特殊,它是为了展示很多很多数据用的,但是ListView只承担交互和展示工作而已,至于这些数据来自哪里,ListView是不关心的。因此,我们能设想到的最基本的ListView工作模式就是要有一个ListView控件和一个数据源。
不过如果真的让ListView和数据源直接打交道的话,那ListView所要做的适配工作就非常繁杂了。因为数据源这个概念太模糊了,我们只知道它包含了很多数据而已,至于这个数据源到底是什么样类型,并没有严格的定义,有可能是数组,也有可能是集合,甚至有可能是数据库表中查询出来的游标。所以说如果ListView真的去为每一种数据源都进行适配操作的话,一是扩展性会比较差,内置了几种适配就只有几种适配,不能动态进行添加。二是超出了它本身应该负责的工作范围,不再是仅仅承担交互和展示工作就可以了,这样ListView就会变得比较臃肿。
那么显然Android开发团队是不会允许这种事情发生的,于是就有了Adapter这样一个机制的出现。顾名思义,Adapter是适配器的意思,它在ListView和数据源之间起到了一个桥梁的作用,ListView并不会直接和数据源打交道,而是会借助Adapter这个桥梁来去访问真正的数据源,与之前不同的是,Adapter的接口都是统一的,因此ListView不用再去担心任何适配方面的问题。而Adapter又是一个接口(interface),它可以去实现各种各样的子类,每个子类都能通过自己的逻辑来去完成特定的功能,以及与特定数据源的适配操作,比如说ArrayAdapter可以用于数组和List类型的数据源适配,SimpleCursorAdapter可以用于游标类型的数据源适配,这样就非常巧妙地把数据源适配困难的问题解决掉了,并且还拥有相当不错的扩展性。
3、RecyclerView的横向滚动
使用LinearLayoutManager时,默认垂直线性布局
用layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL)可设置为水平布局,实现横向滚动(需要对子项布局进行一些修改)
4、RecyclerView的瀑布流布局实现
RecyclerView recyclerView=(RecyclerView)findViewById(R.id.recyclerView);StaggeredGridLayoutManager staggeredGridLayoutManager=new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);//三列,每列垂直recyclerView.setLayoutManager(staggeredGridLayoutManager);
注:RecyclerView还可以实现网格布局GridLayout
参考:http://www.jianshu.com/p/43822fc9430e
- 《第一行代码》RecyclerView学习笔记
- RecyclerView的基本用法(第一行代码android学习笔记)
- 《第一行代码》学习笔记
- Android第一行代码学习笔记总结
- 《Android第一行代码》学习笔记
- 《Android第一行代码》学习笔记
- 《第一行代码》学习笔记之网络技术
- 《第一行代码》学习笔记之服务
- 第一行代码学习笔记(一)
- FrameLayout《第一行代码Android》学习笔记
- 《第一行代码》学习笔记_D01
- 《第一行代码》学习笔记_D08
- 《第一行代码》学习笔记intent
- Android第一行代码学习笔记
- 第一行代码学习笔记 第二章
- Android学习笔记_《第一行代码》
- 《第一行代码》Android 学习笔记
- 《第一行代码》Service学习笔记
- Trasform属性学习-Css3
- 欢迎使用CSDN-markdown编辑器
- select,poll,epoll函数
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛C. Coconut
- [计算机组成原理]--字节进制与补码介绍
- 《第一行代码》RecyclerView学习笔记
- 基于UDP协议可靠传输协议QUIC协议和golang server代码和client代码
- Vue-js安装
- 百度地图测量两点间距离(行车距离)
- IE浏览器url带中文参数导致乱码问题(chrome下正常)
- Homebrew
- Java 的 标识符 和 数据类型
- EditText
- C++中构造函数详解