實作 RecycleView 需要建立一個 Adapter 的專屬 Class
class ImageAdapter(val context:Context, val city:List<ImageData>): RecyclerView.Adapter<ImageAdapter.ViewHolder>()
裡面需要 override 三個主要的 function 分別是
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int):ViewHolder {
val view = LayoutInflater.from(viewGroup.context).inflate(R.layout.image_list_item, viewGroup, false)
return ViewHolder(view)
}
這個 function 主要負責建立 ViewHolder 此時我們可以選擇使用預設值或自訂。
我們可以透過 建立 View 並回傳給 ViewHolder
override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
viewHolder.bindImage(context, city[position])
}
這裡會透過 viewHolder 呼叫bindImage(在自訂義的ViewHolder內所建立的function) 來讓資料與RecycleView 結合
override fun getItemCount(): Int {
return city.size
}
計算資料的筆數,讓RecycleView能夠知道需要多少載入多少資料。
除此之外,我們還需要建立一個 inner class 自定義我們的 ViewHolder。
inner class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
fun bindImage(context: Context, imageData: ImageData) {
val resourceId = context.resources.getIdentifier(imageData.cityImage, "drawable", context.packageName)
itemView.cityImageView.setImageResource(resourceId)
itemView.cityTextView.text = imageData.cityName
}
}
我們在 inner class 裡寫了一個 function 來將資料與 View 連結。
結合以上,我們就完成了 RecyclerView 的實作了。
今天就先這樣囉,我們明天見。