excel表格如何拉长
735
2022-05-30
RecyclerView使用入门
本文介绍RecyclerView的使用入门。这里给出一种比较常见的使用方式。
想必读者朋友对列表的表现形式已经不再陌生。手机上有联系人列表,文件列表,短信列表等等。
本文讲述的是在Android开发中用RecyclerView来实现列表效果。
使用步骤
引入RecyclerView
在app的build.gradle文件中添加引用。我们使用的是androidx包。
dependencies { // ... implementation 'androidx.recyclerview:recyclerview:1.1.0' }
数据准备
先确定一下要显示什么样的数据。是用户信息,联系人,或是文件。这里以字符为例。
写代码前,我们先考虑一下需求,就是要如何显示,怎么显示数据。日常工作中,一般会有UI效果图。本文中的美术设计就由我们自己发挥了。
比如显示 a 97。
ViewHolder与layout
现在要显示的数据已经确定了。来设计UI表现。layout与ViewHolder紧密相关。在设计Adapter类前,先写ViewHolder类会比较好。
新建定义item(列表子项)的布局文件item_letter.xml。
这里使用内部类,把ViewHolder类写在activity类里面。
private class VH extends RecyclerView.ViewHolder { TextView tv1; TextView tv2; public VH(@NonNull View itemView) { super(itemView); tv1 = itemView.findViewById(R.id.tv1); tv2 = itemView.findViewById(R.id.tv2); } }
从上面可以看出,ViewHolder和item的layout是紧密相关的。
layout里面的id写的比较简单。实际项目中可以给一些更有意义的id命名。
在activity的layout中,添加RecyclerView。
设计Adapter
设计一个适配器继承自RecyclerView.Adapter
这里的VH是我们上面写好的ViewHolder。
LetterAdapter中持有它自己的数据列表。需要实现3个方法。
onCreateViewHolder方法,要求返回VH对象。
这里就是创建VH对象并返回。而VH构造器要求传入一个View,我们利用LayoutInflater创建一个view给它。当然,创建的根据就是前面设计好的item_letter。
onBindViewHolder是把数据交给对应的VH来显示。
getItemCount方法要求返回数据的数量。
private class LetterAdapter extends RecyclerView.Adapter
粗心大意的时候,可能会忘记初始化adapter里的dataList。报一个null pointer异常。
设置RecyclerView
在Activity的onCreate方法里进行了初始化。
RecyclerView需要2项设置,适配器与LayoutManager。适配器就是我们上面定的那个。
LayoutManager这里用LinearLayoutManager,指定为垂直方向,这样我们会得到一个上下滑动的列表。
List
观察运行结果
运行到手机或者模拟器上,打开这个activity。有的朋友就发现,为啥屏幕里一个子项item就占满了整个屏幕?
因为我们前面设置的item占满屏幕。回到item_letter.xml,看一下根layout的设置。
把layout_height="match_parent"里的设置改为wrap_content。
重新编译运行一下再看看结果。
也可以给根layout设置固定的高度。具体视美术设计和需求而定。
小结
到这里我们掌握了RecyclerView的基本使用方式。
接下来还要了解如何自定义它的表现形式。
例如点击或长按item的反应;拖动调整顺序,侧滑删除;item之间添加分割线;增/删/改数据;使用瀑布流样式等等。也可以查看滑动距离。
RecyclerView使用了适配器模式。
可以查看一个使用示例,显示一列数据。如果要显示不同类型的数据,这里有实现方式。
可以参考官方的RecyclerView文档。
工程地址AndroidTutorial
更多请查看 https://www.an.rustfisher.com/
Android
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。