iT邦幫忙

2021 iThome 鐵人賽

DAY 8
0
自我挑戰組

社畜轉行之旅,30天Kotlin學習筆記系列 第 8

Day 8 | 比較漂亮的清單-客製化Adapter

Adapter客製化

當需要圖文並茂時,就需要客製化Adapter。

  1. 建立資料

    data class Item{
    		val photo: Int,
    		val name: String
    }
    //宣告一個ArrayList,內部為自行設計的Item類別
    val item = ArrayList<Item>()
    //用迴圈產生資料,並放入ArrayList中
    for(i in 0 until 10)
    		item.add(Item(i, "水果${i+1}"))
    
    
  2. 設計項目的Layout

    圖片用ImageView、文字用TextView

  3. 建立客製化Adapter

    class MyAdapter(context: Context, private val data: ArrayList<Item>) :
    		ArrayAdapter<Item>(context, R. layout.adapter _horizontal, data) {
    		//回傳資料集合的數量
    		override fun getCount() = data.size
    		//回傳指定位置的資料
    		override fun getItem(position: Int) = data[position]
    		//回傳指定位置的資料識別標鐵
    		override fun getItemId(position: Int) = OL
    		//回傅指定位置的項目畫面
    		override fun getView(position: Int, convertView: View?,parent: ViewGroup) : View {
    				//依據adapter_horizontal建立畫面
    				val view = View.inflate(parent.context, R.layout.adapter_horizontal, null)
    				//依據position取得對應的資料内容
    				val item = getItem(position) ?: return view
    				//將資料指派給元件呈現
    				val img_photo = view.findViewById<ImageView>(R.id.img_photo)
    				val tv_name = view.findViewById<TextView>(R.id.tv_name)
    				img_photo.setImageResource (item.photo)
    				tv_name.text = item.name
    				//回傳此項目的畫面
    				return view
    		}
    }
    
    • getCount()會回傳資料數量,通常放入資料集合的總數量
    • getItem(position: Int)傳入特定位置,回傳此位置的的資料內容
    • getItemID(position: Int)傳入特定位置,回傳此位置資料的識別標籤,識別標籤具有唯一性
    • getView(position: Int, convertView: View?,parent: ViewGroup)會回傳特定位置的項目畫面,使用者要先初始化畫面,將項目編號(position)傳入getItem,從資料集合中取得此項目編號的資料,並把資料指派給元件呈現,最後回傳此項目的畫面給清單元件顯示。

上一篇
Day 7 | 清單元件 - 純文字
下一篇
Day 9 | 清單元件類型
系列文
社畜轉行之旅,30天Kotlin學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言