昨天提到 RecyclerView.Adapter() 有幾個待執行的方法,分別是:
在這些之前我們要先對 ViewHolder 做些處理, ViewHolder 是Adapter裡面很重要的零件,當 ListView 裡面有大量的資料需要載入的時候,會大大影響性能,所以我們需要以填充方式重複使用這些view。
還記得每筆資料是一張圖和一串字嗎?將 ViewHolder 參數命名成「itemView」繼承View,itemView.image
代表將xml裡的image_demo指給itemView、作為資料圖片的顯示畫面,如下圖宣告一個text,將文字的顯示畫面text_demo指給它:
inner class ViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView) {
val image = itemView.image
val text = itemView.text
接著,我們要讓程式碼知道這些畫面是要顯示什麼資料的,設一個名為Bind的函式,把List.kt檔裡的資料型態用參數傳進來:
設定讓image和text會分別取得該筆資料裡的圖片和文字就可以囉
inner class ViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView) {
val image = itemView.img_demo
val text = itemView.text_demo
fun Bind(item: item){
image.setImageResource(item.image) //(item資料庫裡面的image們)
text.setText(item.text) //(item資料庫裡面的text們)
}
}
現在事情看起來做得差不多了,有把xml畫面連結到Adapter裡、也有寫要讓畫面元件知道要顯示什麼型態的資料,但是,這些都沒有被override,它們還沒被放進真正要執行的方法裡面,所以最後一步就是把執行那三個方法:
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(parent.context)
val view = inflater.inflate(R.layout.activity_my_adapter, parent, false)
return ViewHolder(view)
}
可以想像畫面現在看起來就是這個樣子
override fun getItemCount(): Int = itemList.count() //itemList
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.Bind(itemList[position])
}
寫到這裡,總算是把Adapter做好了,這時候只要去MainActivity裡面把RecycleView呈現出來就完成基本的ImageList囉!讓RecycleView呈現出來,基本要做的兩件事情:
val Adapter = MyAdapter()
recycleView1.layoutManager = LinearLayoutManager(this: Context)
recycleView1.adapter = Adapter