博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RecyclerView的简单使用
阅读量:7241 次
发布时间:2019-06-29

本文共 4038 字,大约阅读时间需要 13 分钟。

自从Android 5.0之后,google推出了一个RecyclerView控件,他是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,RecyclerView相当于是ListView的升级版。

RecyclerView封装了ViewHolder的回收复用,也就是说RecyclerView标准化了ViewHolder,编写Adapter面向的是ViewHolder而不是View了,复用的逻辑被封装了,写起来更加简单。

RecyclerView提供一种插拔式的体验,高度的解耦,异常的灵活,针对一个Item的显示RecyclerView专门抽取了相应的类,来控制Item的显示,使其的扩展性特别强。

引入RecyclerVIew

compile 'com.android.support:recyclerview-v7:25.1.0'

创建布局文件

主布局文件
/*activity_main.xml*/
Item布局文件
/*item.xml*/

创建Adapter

RecyclerView的Adapter要比ListView的Adapter设置起来稍微复杂一点,这也是RecyclerView高度解耦的体现,虽然代码复杂一点,但扩展性很好,下面介绍一下实现RecyclerView的Adapter的三个方法:

onCreateViewHolder()

该方法主要是为每个Item加载一个View,但是该方法返回的是一个ViewHolder,该方法吧View直接封装的ViewHolder中,然后我们面向的是ViewHolder这个实例,这个ViewHolder也由自己编写,但不用像ListView调用convertView.setTag(vh)和convertView.getTag()了。

onBindViewHolder()

该方法主要用来把数据绑定在View上,直接提供一个ViewHolder而不是convertView。

getItemCount()

该方法返回选项总数。

Adapter代码
/** * Created by jzman on 2017/5/13 0013. */public class RvAdapter extends RecyclerView.Adapter
{ private Context mContext; private ArrayList
mList; public RvAdapter() {} public RvAdapter(Context mContext, ArrayList
mList) { this.mContext = mContext; this.mList = mList; } //用于创建ViewHolder @Override public DataViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(mContext).inflate(R.layout.item,null); //使用代码设置宽高(xml布局设置无效时) view.setLayoutParams(new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); DataViewHolder holder = new DataViewHolder(view); return holder; } //绑定数据 @Override public void onBindViewHolder(DataViewHolder holder, int position) { holder.tv_data.setText(mList.get(position)); } //数据总数 @Override public int getItemCount() { return mList.size(); } //创建ViewHolder public static class DataViewHolder extends RecyclerView.ViewHolder{ TextView tv_data; public DataViewHolder(View itemView) { super(itemView); tv_data = (TextView) itemView.findViewById(R.id.tv_recycle); } }

使用StaggeredGridLayoutManager管理器时,Adapter参考如下:

/** * Created by jzman on 2017/5/13 0013. * RecycleView的Adapter */public class RvAdapter extends RecyclerView.Adapter
{ private Context mContext; private RecyclerView recyclerView; private ArrayList
mList; private ArrayList
mHeight; public RvAdapter() {} public RvAdapter(Context mContext, ArrayList
mList) { this.mContext = mContext; this.mList = mList; } /** * 初始化每个Item的高度(瀑布流效果) * @return */ public ArrayList
initHeight(){ mHeight = new ArrayList<>(); for (int i=0;i

MainActivity

/** * Created by jzman on 2017/5/13 0013. */public class MainActivity extends AppCompatActivity {    private RecyclerView rv;    RvAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        rv = (RecyclerView) findViewById(R.id.rv);        //设置布局管理器        rv.setLayoutManager(new LinearLayoutManager(this));//线性//        rv.setLayoutManager(new GridLayoutManager(this,4));//线性//        rv.setLayoutManager(new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL));//线性        adapter = new RvAdapter(this,initData());        rv.setAdapter(adapter);    }    public static ArrayList
initData(){ ArrayList
arrayList = new ArrayList<>(); for (int i=0;i<50;i++){ arrayList.add("第"+i+"条数据"); } return arrayList; }}

显示效果

LinearLayoutManager GridLayoutManager StaggeredGridLayoutManager
image image image

如果觉得对自己有帮助,可以关注公众号:jzman-blog,一起交流学习。

RecyclerView的简单使用

转载于:https://blog.51cto.com/8081755/2392611

你可能感兴趣的文章
Codeforces Round #329(Div2)
查看>>
虚拟机console基础环境部署——安全加固
查看>>
NewtonSoft对象转json时,把 NULL 转 "" , 过滤 NULL, DateTime 时间类型去除 T
查看>>
数据库索引
查看>>
华为交换机常用配置命令
查看>>
PHPUnit学习02---如何管理TestCase
查看>>
[MySQL] 索引中的b树索引
查看>>
git/github常用指令、入门
查看>>
GIT的Push和Pull,强制Pull覆盖本地命令
查看>>
Spring IoC 的基本使用
查看>>
据说每个大牛、小牛都应该有自己的库——Ajax
查看>>
ODPS功能介绍之数据导入
查看>>
关于拼接页面,单引号,双引号的简单总结
查看>>
Html 文字排版
查看>>
西风 West Wind Html帮助构建器
查看>>
面试杂碎01
查看>>
关于Redis数据过期策略
查看>>
mysql中limit的用法详解[数据分页常用]
查看>>
关于Log4Net的使用
查看>>
LaTeX argmin argmax 下标使用方法
查看>>