RecyclerView:
优点:
提供了一种插拔式的体验,高度解耦,异常灵活
用法:
1.通过布局管理器LayoutManager控制其显示方式
2.通过ItemDecoration控制Item的间隔(可绘制)
3.通过ItemAnimator控制Item的增删动画
首先在build.gradle中添加依赖:
implementation 'com.android.support:recyclerview-v7:28.0.0'
版本号因人而异,我的是28,然后建立item_view.xml,设置其子项显示的布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="80dp">
<TextView
android:id="@+id/textView"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.constraint.ConstraintLayout>
设置activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.fitsoft.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.constraint.ConstraintLayout>
MainActivity:
package com.fitsoft;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recycler_view);
//设置线性布局管理器
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
//设置适配器
MyAdapter myAdapter = new MyAdapter();
recyclerView.setAdapter(myAdapter);
}
private class MyAdapter extends RecyclerView.Adapter{
MyViewHolder viewHolder;
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
//绑定布局
View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_view, viewGroup, false);
//绑定布局里面的元素
//由于RecyclerView.ViewHolder是静态抽象类,不能实例化,只能新建一个类来继承
viewHolder = new MyViewHolder(itemView);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
//这里的viewHolder其实就是我们新建的MyViewHolder类的一个对象,这里进行强制转换
//数据的处理都在这个函数里面
((MyViewHolder) viewHolder).textView.setText("编号:"+i);
}
@Override
public int getItemCount() {
//返回子项的个数
return 30;
}
private class MyViewHolder extends RecyclerView.ViewHolder{
//继承这个静态抽象类,使之可以被绑定
private TextView textView;
MyViewHolder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.textView);
}
}
}
}
注释很详细。
效果图: