一:給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)
}
}