RecyclerView简单使用
说起做滚动功能,首先就会想到ListView,但是需要做更强大的功能,ListView就做不到了。所以RecyclerView就孕育而生!
实现步骤:
- 1、在布局中添加 RecyclerView 控件:
- 2、定义一个工具类
- 3、定义适配器类
- 4、定义数据源
- 5、创建适配器
- 6、设置布局管理器
- 7、设置适配器
接下来实现ta
1、在布局中添加 RecyclerView 控件:
因为 RecylerView 是 support-v7 包中的新组件,所以需要在 build.gradle 文件中的 dependencies 中添‘com.android.support.recyclerview-v7:xx.x.x’(x是当前版本)
- build.gradle 文件
implementation 'com.android.support:recyclerview-v7:26.0.2'( 我的当前版本是26.0.2 )
然后在布局文件中添加 RecyclerView 控件
- activity.xml
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerVview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
2、定义一个工具类
用于添加数据:
- Fruits.java
public class Fruits {
private int fruitImage;//水果的图片
private String fruitName;//水果的名称
//构造器用于添加数据
public Fruits(int fruitImage, String fruitName) {
this.fruitImage = fruitImage;
this.fruitName = fruitName;
}
//用于设置子项的图片
public int getFruitImage() {
return fruitImage;
}
//用于设置子项的名称
public String getFruitName() {
return fruitName;
}
}
3、定义适配器
1) 添加一个 RecyclerView 的子项布局
2) 定义一个适配器类继承RecyclerView.Adapter
3) 在自定义适配器类中写一个静态的内部类 ViewHolder,并继承RecyclerView.ViewHolder
4) 指定自定义适配器类的泛型为 ViewHolder 内部类
5) 重写3个方法:分别是:onCreateViewHolder()、onBindViewHolder()、getItemCount()
1) 在 onCreateViewHolder() 方法中创建 ViewHolder 实例
2) 在 onBindViewHolder() 方法对 RecyclerView 子项布局中的数据进行赋值
3) 在 getItemCount() 方法中返回子项个数
添加一个 RecyclerView 的子项布局
- item.xml
<?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="wrap_content">
<ImageView
android:id="@+id/fruits_image"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_margin="5dp" />
<TextView
android:id="@+id/fruits_tv"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_margin="5dp"
android:gravity="center|left"
android:textSize="23sp" />
</LinearLayout>
- MyAdapter.java
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<Fruits> fruitsList;
//通过构造器得到 List 集合中的数据
public MyAdapter(List<Fruits> fruitsList) {
this.fruitsList = fruitsList;
}
/**
* 此方法是用于创建 ViewHolder() 的实例,并加载子项布局
*/
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//实例化子项布局
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
//创建ViewHolder实例
ViewHolder holder = new ViewHolder(view);
return holder;
}
/**
* 此方法是用于对 RecyclerView 子项布局中的数据进行赋值
*/
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
//从fruitsList中把Fruits对象取出
Fruits fruits = fruitsList.get(position);
//调用setImageResource()方法设置图片
holder.image_fruits.setImageResource(fruits.getFruitImage());
//调用setText()方法设置文本
holder.tv_fruits.setText(fruits.getFruitName());
}
/**
* 用于返回RecyclerView子项的个数
*/
@Override
public int getItemCount() {
return fruitsList.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
ImageView image_fruits;
TextView tv_fruits;
public ViewHolder(View itemView) {
super(itemView);
image_fruits = itemView.findViewById(R.id.fruits_image);
tv_fruits = itemView.findViewById(R.id.fruits_tv);
}
}
}
4、定义数据源
5、创建适配器
6、设置布局管理器
7、设置适配器
- MainActivity .java
public class MainActivity extends AppCompatActivity {
private List<Fruits> fruitList;// 4、用于存放数据
private RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recyclerVview);//找到RecyclerView控件
addData();// 4、添加数据
MyAdapter adapter = new MyAdapter(fruitList);// 5、创建适配器
// 6、设置布局管理器
LinearLayoutManager manager = new LinearLayoutManager(
MainActivity.this,
LinearLayout.VERTICAL,
false
);
recyclerView.setLayoutManager(manager);
recyclerView.setAdapter(adapter);// 7、设置适配器
}
/**
* 4、此方法用于添加数据
*/
private void addData() {
fruitList = new ArrayList<>();
Fruits apple = new Fruits(R.drawable.apple, "苹果");
fruitList.add(apple);
Fruits banana = new Fruits(R.drawable.banana, "香蕉");
fruitList.add(banana);
Fruits cherry = new Fruits(R.drawable.cherry, "樱桃");
fruitList.add(cherry);
Fruits grape = new Fruits(R.drawable.grape, "葡萄");
fruitList.add(grape);
Fruits lemon = new Fruits(R.drawable.lemon, "柠檬");
fruitList.add(lemon);
Fruits litchi = new Fruits(R.drawable.litchi, "荔枝");
fruitList.add(litchi);
Fruits orange = new Fruits(R.drawable.orange, "橙子");
fruitList.add(orange);
Fruits peach = new Fruits(R.drawable.peach, "桃子");
fruitList.add(peach);
Fruits pear = new Fruits(R.drawable.pear, "梨");
fruitList.add(pear);
Fruits pineapple = new Fruits(R.drawable.pineapple, "菠萝");
fruitList.add(pineapple);
Fruits strawberry = new Fruits(R.drawable.strawberry, "草莓");
fruitList.add(strawberry);
Fruits watermelon = new Fruits(R.drawable.watermelon, "西瓜");
fruitList.add(watermelon);
}
}
效果图:
可以看出,这里没有分割线。RecyclerView 不像 ListView 那样直接在 控件中添加 android:divider 和 android:dividerHeight 就行。ta需要做一下操作
在 MainActivity.java 的 onCreate() 方法中添加如下代码:
//添加分割线
recyclerView.addItemDecoration(new DividerItemDecoration(MainActivity.this, LinearLayout.VERTICAL));