RecyclerView简单使用介绍
RecyclerView 是 Android 5.0 版本中新添加的一个用来取代ListView的SDK,它相比ListView更加灵活方便,下面来介绍一下它的使用方法。
在这之前,我要声明的是:RecyclerView 是Support Library的一部分。所以只需要在app/build.gradle中添加以下依赖,便能立即使用:
compile 'com.android.support:recyclerview-v7:24.1.1'
先介绍RecyclerView两个比较重要的类:
- Adapter:使用RecyclerView之前,你需要一个继承自RecyclerView.Adapter的适配器,作用是将数据与每一个item的界面进行绑定。
- LayoutManager:用来确定每一个item如何进行排列摆放,何时展示和隐藏。回收或重用一个View的时候,LayoutManager会向适配器请求新的数据来替换旧的数据,这种机制避免了创建过多的View和频繁的调用findViewById方法(与ListView原理类似)。
目前SDK中提供了三种自带的LayoutManager:
- LinearLayoutManager (线性布局)
- GridLayoutManager (网格布局)
- StaggeredGridLayoutManager(瀑布流网格布局)
RecyclerView 简单使用方法步骤:
1 创建 RecyclerView 布局和 Item 布局
RecyclerView 布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
</android.support.v7.widget.RecyclerView>
</ScrollView>
</LinearLayout>
Item布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:background="@color/colorWhite"
android:paddingTop="10dp"
android:layout_height="120dp">
<ImageView
android:layout_width="180dp"
android:layout_height="120dp"
android:id="@+id/chedaituan_image"
android:src="@drawable/banner"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/colorBlack"
android:textSize="20sp"
android:text="RecyclerView使用方法"/>
<TextView
android:id="@+id/text2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/colorBlack"
android:text="item"
android:textSize="12sp"/>
<TextView
android:id="@+id/text3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/colorAccent"
android:textSize="15sp"
android:text="item"/>
</LinearLayout>
</LinearLayout>
2 在 Activity 中获取该 RecyclerView ,并声明 LayoutManager 和 Adapter
private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;
private MyRecyclerAdapter myRecyclerAdapter;
3 创建适配器继承 RecyclerView.Adapter
private class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolderCar>{
//创建item的View,被LayoutManager所调用@Override
public MyViewHolderCar onCreateViewHolder(ViewGroup parent, int viewType) {
View view= LayoutInflater.from(getApplication()).inflate(R.layout.chedaituan_item_layout,parent,false);
MyViewHolderCar myViewHolderCar=new MyViewHolderCar(view);
return myViewHolderCar;
}
//将数据与界面进行绑定的操作
@Override
public void onBindViewHolder(MyViewHolderCar holder, int position) {
holder.imageView.setImageResource(mData_car.get(position).getImageId());
holder.textView1.setText(mData_car.get(position).getTextView1());
holder.textView2.setText(mData_car.get(position).getTextView2());
holder.textView3.setText(mData_car.get(position).getTextView3());
}
//获取数据的数量
@Override
public int getItemCount() {
return mData_car.size();
}
//自定义的ViewHolder,持有每个Item的的所有界面元素
class MyViewHolderCar extends RecyclerView.ViewHolder{
ImageView imageView;
TextView textView1,textView2,textView3;
public MyViewHolderCar(View itemView) {
super(itemView);
imageView= (ImageView) itemView.findViewById(R.id.chedaituan_image);
textView1= (TextView) itemView.findViewById(R.id.text1);
textView3= (TextView) itemView.findViewById(R.id.text3);
textView2= (TextView) itemView.findViewById(R.id.text2);
}
}
}
4 获取数据源
5 生成适配器对象并绑定适配器,设置相应的布局
myRecyclerAdapter=new MyRecyclerAdapter();
recyclerView_car.setAdapter(myRecyclerAdapter);
//设置RecyclerView为线性布局
layoutManager_car=new LinearLayoutManager(getApplication());
recyclerView_car.setLayoutManager(layoutManager_car);
运行后截图如下: