RecyclerView
RecyclerView介绍
Android5.0中新添加的用来取代ListView的控件,灵活性与可替代性比ListView更好。原理与ListView类似,都是仅仅维护少量的View并且可以展示大量的数据集。但RecyclerView只管回收和复用View,其他可以自己设置,高度解耦(可通过设置LayoutManager实现ListView,GirdView,瀑布流等效果)。
使用两种方式简化了数据的展示和处理
使用LayoutManager来确定每一个item的排列方式
为增加和删除项目提供默认的动画效果
核心api
a.控制其显示的方式,我们可以通过布局管理器LayoutManager
1. LinearLayoutManager 线性管理器,支持横向、纵向。
2. GridLayoutManager 网格布局管理器
3. StaggeredGridLayoutManager 瀑布式布局管理器
b.控制Item间的间隔(可绘制),我们可以通过ItemDecoration
c.控制Item增删的动画,我们可以通过ItemAnimator
RecyclerView的使用
- 添加依赖:
compile 'com.android.support:recyclerview-v7:23.4.0'
- 在布局中引入RecyclerView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
- 创建类继承RecyclerView的Adapter,按提示重写onCreateViewHolder(),onBindViewHolder(),getItemCount(),手动创建类继承RecyclerView.ViewHolder。
package com.rosenray.recyclerviewdemo;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
/**
* Created by RosenRay on 2017/1/1.
* 项目名 Demo
* 类名 MyRecyclerViewAdapter
* 描述:
*/
public class MyRecyclerViewAdapter extends RecyclerView.Adapter {
/**
* 创建ViewHolder
*/
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(parent.getContext(), R.layout.item, null);
return new MyViewHolder(view);
}
/**
* 对ViewHolder里的控件赋值
*/
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
MyViewHolder viewHolder = (MyViewHolder) holder;
viewHolder.setData(position);
}
/**
* 条目数量
*/
@Override
public int getItemCount() {
return 50;
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView tv;
public MyViewHolder(View itemView) {
super(itemView);
tv = (TextView) itemView.findViewById(R.id.tv);
}
public void setData(int position) {
tv.setText("第"+position+"个");
}
}
}
- 给RecyclerView设置LayoutManager
//创建线性布局管理器
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
//指定方向为竖直方向
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
rv.setLayoutManager(linearLayoutManager);
- 设置适配器
rv.setAdapter(new MyRecyclerViewAdapter());