下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】android之recyclerview的基本使用
Google在推出Android5.0的时候推出了Material
Design,而RecyclerView是Material
Design重要组件之一。当然还有CardView/Palette。 RecyclerView是用来替换传统的ListView和GridView,瀑布流效果的。是的RecyclerView这一个控件,可以实现这三个效果。虽然在开始使用recyclerview的时候会感到有些男,但是用熟练了会发现recyclerview十分强大。它可以给每一item里面的控件设置点击时间,而不需要担心事件冲突的问题,如果是使用listview或者是gridview就必须要解决事件冲突,甚至listview或gridview的item只能设置一个点击事件,否则就会造成事件冲突,而这些冲突并不好解决。所以recyclerview来了。首先在项目中集成RecyclerView,在build.gradle添加RecyclerView的依赖compile'com.android.support:recyclerview-v7:23.2.1'这样项目中就集成recyclerview了,AndroidStudio会自动联网下载recyclerview包。在activity_main.xml中,使用recyclerview.<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>布局中已经有了recyclerview的控件,下面就开始在代码中编写。
在这里解释一下recyclerview的使用。就像listview那样,recyclerview也需要一个适配器;在我们优化listview的时候,我们经常会使用到一个内部类ViewHolder来保存item中的控件,以便于item的复用。而现在recyclerview则必须使用ViewHolder。这个ViewHolder必须继承RecyclerView.ViewHolder,RecyclerView.ViewHolder有一个参数的构造方法,传入的是一个view,这个view就是recyclerview的item。RecyclerViewHolder:public
class
RecyclerViewHolder
extends
RecyclerView.ViewHolder
{
public
TextView
textView;
public
ImageView
p_w_picpathView;
public
RecyclerViewHolder(View
itemView)
{
super(itemView);
textView
=
(TextView)
itemView.findViewById(R.id.textView);
p_w_picpathView
=
(ImageView)
itemView.findViewById(R.id.p_w_picpathView);
}
}RecyclerViewHolder写好之后就开始写Adapter.同样RecyclerAdapter需要继承RecyclerView.Adapter<RecyclerViewHolder>,泛型ViewHolder就是自己自定义的RecyclerViewHolder。Adapter的写法如下:public
class
RecyclerAdapter
extends
RecyclerView.Adapter<RecyclerViewHolder>
{
private
List<Map<String,
String>>
dataList;
public
RecyclerAdapter()
{
dataList
=
new
ArrayList<>();
}
public
void
addAll(List<Map<String,
String>>
data){
dataList.addAll(data);
}
/**
*
*
@param
viewType
对应的是getItemViewType(int
position)方法返回的数值
*/
@Override
public
RecyclerViewHolder
onCreateViewHolder(ViewGroup
parent,
int
viewType)
{
View
view
=
LayoutInflater.from(parent.getContext()).inflate(R.layout.item,
parent,
false);
return
new
RecyclerViewHolder(view);
}
/**
*
*
@param
holder
对应的是onCreateViewHolder方法,返回的RecyclerViewHolder
*
@param
position
当前的item的位置
*/
@Override
public
void
onBindViewHolder(RecyclerViewHolder
holder,
int
position)
{
holder.textView.setText(dataList.get(position).get("data"));
}
@Override
public
int
getItemCount()
{
return
dataList.size();
}
}MainActivity中的代码。public
class
MainActivity
extends
AppCompatActivity
{
private
RecyclerView
recyclerView;
//使用线性布局管理器,设置的方向orientation是默认,即垂直方向
private
LinearLayoutManager
manager;
//适配器
private
RecyclerAdapter
adapter;
//数据源
private
List<Map<String,
String>>
list;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView
=
(RecyclerView)
findViewById(R.id.recyclerView);
manager
=
new
LinearLayoutManager(this);
adapter
=
new
RecyclerAdapter();
//设置布局管理器
recyclerView.setLayoutManager(manager);
//给recyclerview设置适配器
recyclerView.setAdapter(adapter);
list
=
new
ArrayList<>();
for
(int
i=0;i<50;i++)
{
Map<String,String>
map
=
new
HashMap<>();
map.put("data",
"item-->
"+i);
list.add(map);
}
adapter.addAll(list);
adapter.notifyDataSetChanged();
}
}recyclerview实现listview的效果就完成了,运行效果:如果是想每个item横向滑动的话,只需要使用LinearLayoutManager的三个参数的构造方法就行了,newLInearLayoutManager(this,LinearLayoutManager.HORIZONTAL,true)就可以实现横向滑动的效果了。
recyclerView实现GridView的效果。需要是用是GridLayoutManager。将recyclerView的布局管理器更换成GridLayoutManagermanager=newGridLayoutManager(this,2),效果图如下:给RecyclerView添加滚动监听。与listView和gridView有写不同,recyclerView判断滚动到哪一个位置的饿时候,需要使用到使用到布局管理器(前面设置的recyclerview.setLayoutManager())。滚动监听的方法有两个,setOnScrollListener(已不推荐使用)和addOnScrollListener。两个方法本质上是一致的。代码如下:recyclerView_follow.addOnScrollListener(new
RecyclerView.OnScrollListener()
{
@Override
public
void
onScrollStateChanged(RecyclerView
recyclerView,
int
newState)
{
super.onScrollStateChanged(recyclerView,
newState);
//滚动的状态改变时,调用此方法。
}
@Override
public
void
onScrolled(RecyclerView
recyclerView,
int
dx,
int
dy)
{
super.onScrolled(recyclerView,
dx,
dy);
//屏幕中最下面一个item的所在数据源的位置(postion)。
int
lastVisiableItem
=
manager.findLastVisibleItemPosition();
//一共有多少个
int
totalItemCount
=
manager.getItemCount();
//当滑动到倒数第二个item时,即联网获取下一页的数据
if
(lastVisiableItem
>=
totalItem
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 5G技术在远程医疗中的应用
- 疾病诊疗流程优化汇报
- 护理专业实习生临床实践能力培养策略
- 恶性肿瘤护理管理与护理心理
- 医疗大数据在临床应用的研究
- 医疗机构医疗废物分类与回收礼仪
- 财政预决算报告课件
- 医疗保险理赔流程与案例分析
- 医生问诊技巧与医患关系
- 医疗护理岗位礼仪与沟通技巧
- 10.2 常见的酸和碱(课件)-2024-2025学年九年级化学人教版下册
- 2024电力智能录波器技术规范
- 《中国慢性阻塞性肺疾病基层诊疗与管理指南(2024年)》解读课件
- 暨南大学《法理学》2023-2024学年第一学期期末试卷
- 小学课后服务经费管理方案
- 道路绿化养护道路绿化养护方案
- DL-T 5117-2021水下不分散混凝土试验规程-PDF解密
- 宝马购车合同
- 神经内科品管圈成果汇报-提高脑卒中偏瘫患者早期自我肢体功能锻炼规范执行率
- 缺血性脑卒中静脉溶栓护理
- 电子电路基础-电子科技大学中国大学mooc课后章节答案期末考试题库2023年
评论
0/150
提交评论