RecyclerView的Adapter的详细使用过程

一:给RecyclerView的adapter赋给其指定的adapter
mBinder?.mrecycler?:是Recycler的ID,
mBinder?.mrecycler?.adapter = adapter
二:实现RecyclerView的Adapter
1:定义一个类继承于RecyclerView.Adapter并实现其相应方法
class MyAdapter:RecyclerView.Adapter<参数一> {
}
进去查看得:

   参数一需要一个继承与ViewHolder的类,这时候就定义一个类继承于ViewHolder,并完成其构造

class myViewHolder(itemView: View) :RecyclerView.ViewHolder(itemView){
这里面是对item的管理,可以在这里面进行对item各个部分的分解
}
在将myViewHolder传到参数一中:
class MyAdapter: RecyclerView.Adapter<MyAdapter.myViewHolder>() {
class myViewHolder(itemView: View) :RecyclerView.ViewHolder(itemView){

}
}

2:实现adapter中各方法:

class MyAdapter: RecyclerView.Adapter<MyAdapter.myViewHolder>() {

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): myViewHolder {
parent:item的父容器,viewType:下面一个方法传递过来的类型
创造item,将xml文件转换成view,并传递给ViewHolder
return myViewHolder(转换的视图)
}

override fun getItemViewType(position: Int): Int {
posion:item所在的位置
确定每个item的类型
return super.getItemViewType(position)
}
override fun onBindViewHolder(holder: myViewHolder, position: Int) {
holder:ViewHolder传递过来的,position:当前item所在的位置
绑定数据,将确切的数据绑定到视图上,
}

override fun getItemCount(): Int {
确定共有多少个item
}
class myViewHolder(itemView: View) :RecyclerView.ViewHolder(itemView){

}
}


例子:

mBinder?.mrecycler?.layoutManager = StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL)


//确定数据源
for (i in 0..10){
if ((Random.nextInt())%2==0){
dataSource.add(R.drawable.arm_right)
}else{
dataSource.add(R.drawable.head)
}

}
val adapter = PhotosAdapter()
adapter.datas = dataSource
mBinder?.mrecycler?.adapter = adapter

adapter中:
class PhotosAdapter: RecyclerView.Adapter<PhotosAdapter.myViewHolder>() {
lateinit var datas:MutableList<Int>
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): myViewHolder {
//确定每一个item的具体视图(样子),通过xml文件配置
//将xml转换成view,layoutInflate布局解析器
/*
adapter里面是没有上下文的,可以通过知道一个view,获取view所在的上下文
*/
//获取布局解析器
val layoutInflater = LayoutInflater.from(parent.context)
//解析布局
val item = layoutInflater.inflate(R.layout.photo_card_item,parent,false)
return myViewHolder(item)
}

override fun onBindViewHolder(holder: myViewHolder, position: Int) {
//视图解析出来之后是否需要绑定数据
//position传过来的是每个item的序号(每个item的所在处)
//viewHodler负责管理每个item。但是传递过来的item是一个一个的传,并非一起传
holder.item_image.setImageResource(datas[position])
}

override fun getItemCount(): Int {
//确定有多少个item
return datas.size
}
//定义一个类继承与RecyclerView.ViewHodler
class myViewHolder(itemView: View) :RecyclerView.ViewHolder(itemView){
//这里传递过来的view,就是滚动过程中的要重复利用的item
//通过这里获取每个item中每个确切的控件
val item_image = itemView.findViewById<ImageView>(R.id.imageView)
}
}

原文地址:https://www.cnblogs.com/luofangli/p/14945384.html