1.RecycleView简介
从
Android 5.0
开始,谷歌公司推出了一个用于
大量数据展示的新控件
RecylerView
,可以用来代替
传统的
ListView
,更加强大和灵活。
RecyclerView
是一个强大的滑动组件,与经典的
ListView
相比,同样拥有
item
回收复用的功能,这
一点从它的名字
Recyclerview
即回收
view
也可以看出。
RecyclerView
支持
线性布局
、
网格布局
、
瀑布流布局
三种,而且同时还能够控制横向还是纵向滚
动。
2.RecycleView纵向排列
2.1第一步:布局
在住布局中引入RecycleView控件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="15dp"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rv_v_view"/>
</LinearLayout>
创建编写子项布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/iv_icon"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv_name"/>
</LinearLayout>
2.2编写代码
1.编写实体类
2.创建适配器
3.在住活动中使用
1.编写实体类
主要看你做的项目来决定 这里是做的是左边显示图片右边显示名字所以就要用到图片ID和名字
AddressBook.java
public class AddressBook {
private String name;
private int imageId;
public AddressBook(String name, int imageId) {
this.name = name;
this.imageId = imageId;
}
public String getName() {
return name;
}public int getImageId() {
return imageId;
}
}
2.创建适配器
1).创建一个新类:去继承RecyclerView.Adapter,并且将泛型指定为AddressBookAdapter.ViewHolder一开始会报错因为ViewHolder是一个内部类
还没有定义。所以接下来我们就定义内部类。这个内部类的作用主要是通过传入的一个参数
view
,
从而获取
RecyclerView
子项的最外层布局,然后通过
findViewById()
方法获取控件的实例(在本例
子中获取的是
ImageView
和
TextView
)。
2.
定义全局变量
mList
,生成构造函数。 这个构造函数是用来把要展示的数据源(图片、名字)传进
来,并赋值给
mList
。
3.
重写
onCreateViewHolder()
方法 这个函数主要是用来加载子项布局(
addressbook_item
),然后
创建
ViewHolder
实例并把子项布局传入到构造函数中,最后返回
ViewHolder
实例。
4.
重写
onBindViewHolder()
方法 这个方法是用来对传入的子项布局进行赋值的,也就是说当子项布
局被传入进来,是它让布局有了名字、图片。它会在每个布局被滚动到屏幕的时候执行。在本例子
中,是通过
position
参数得到当前项的
AddressBook
实例,然后再把数据设置到
ViewHolder
的
ImageView
和
TextView
里。
5.
重写
getItemCount()
方法 这个方法主要是用来返回数据源的长度,也就是告诉
RecyclerView
他有多
少个子项
创建
AddressBookAdapter.java
public class AddressBookAdapter extends
RecyclerView.Adapter<AddressBookAdapter.ViewHolder>{
private List<AddressBook> mList;
static class ViewHolder extends RecyclerView.ViewHolder{
ImageView AddressBookImage;
TextView AddressBookName;
public ViewHolder(@NonNull View view) {
super(view);
AddressBookImage = (ImageView)view.findViewById(R.id.iv_icon);
AddressBookName = (TextView)view.findViewById(R.id.tv_name);
}
}
public AddressBookAdapter(List<AddressBook> mList) {
this.mList = mList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view=LayoutInflater
.from(parent.getContext())
.inflate(R.layout.addressbook_item,paren t,false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
AddressBook AddressBook = mList.get(position);
holder.AddressBookImage.setImageResource(AddressBook.getImageId());
holder.AddressBookName.setText(AddressBook.getName());
}
@Override
public int getItemCount(){
return mList.size();
}
}
在活动中使用
1.
获取
RecyclerView
的实例
2.
创建
LinearLayoutManager
对象
3.
创建
AddressBookAdapter
实例
4.
模拟数据
5.
将模拟数据传入
AddressBookAdapter
的构造函数中
6.
调用
setAdapter()
方法完成适配器设置
public class MainActivity extends AppCompatActivity {// 模拟从服务器返回的结果数据private String [] names = { " 庄周 " , " 花木兰 " , " 刘禅 " , " 猪八戒 " , " 孙悟空 " , " 盘古 " , " 蒙恬" , " 后羿 " , " 李元芳 " , " 诸葛亮 " };private int [] imgs = { R . mipmap . cat , R . mipmap . chameleon , R . mipmap . dog ,R . mipmap . owl , R . mipmap . grizzly , R . mipmap . goose , R . mipmap . panda , R . mipmap . parrot ,R . mipmap . penguin , R . mipmap . squirrel };// 组合的数据存放的地方private List < AddressBook > list = new ArrayList <> ();private RecyclerView rv_v_view ;@Overrideprotected void onCreate ( Bundle savedInstanceState ) {super . onCreate ( savedInstanceState );setContentView ( R . layout . activity_main );initData ();rv_v_view = findViewById ( R . id . rv_v_view );RecyclerView recyclerView = findViewById ( R . id . rv_v_view );//设置布局管理器LinearLayoutManager layoutManager = new LinearLayoutManager ( this );recyclerView . setLayoutManager ( layoutManager );AddressBookAdapter fruitAdapter = new AddressBookAdapter ( list );recyclerView . setAdapter ( fruitAdapter );}private void initData () {for ( int i = 0 ; i < names . length ; i ++ ) {AddressBook addressBook = new AddressBook ( names [ i ], imgs [ i ]);list . add ( addressBook );}}}