> For the complete documentation index, see [llms.txt](https://yoyo840821.gitbook.io/android-learning/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yoyo840821.gitbook.io/android-learning/android-kotlin-de-recyclerview-ying-yong.md).

# Android - Kotlin的RecyclerView應用

## Model設計

先設計一個bean成一個建構子的模樣，就是Kotlin File，型別加上？表示可能為null

```kotlin
data class DogBreed(
    val breedId: String?,
    val dogBreed: String?,
    val lifeSpan: String?,
    val breedGroup: String?,
    val bredFor: String?,
    val temperament: String?,
    val imageUrl: String?
)
```

## RecyclerView Adapter

1.先設計項目的layout.xml，就自行設計

2\. 自行新增一個Adapter

3.跟Java寫法一樣，先建內部類別XXViewHolder繼承自RecyclerView\.ViewHolder。

4\. 把onCreateViewHolder()，getItemCount()，onBindViewHolder()都實作完

```kotlin
//  2.再implement Adapter<ViewHolder>
class DogsListAdapter(val dogList: ArrayList<DogBreed>) : RecyclerView.Adapter<DogsListAdapter.DogViewHolder> (){
    //1.一樣先寫ViewHolder
    class DogViewHolder(var view : View) : RecyclerView.ViewHolder(view)

    //3.實作
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DogViewHolder {
        val inflater:LayoutInflater = LayoutInflater.from(parent.context)
        val view = inflater.inflate(R.layout.item_dog, parent, false)
        return DogViewHolder(view)
    }

    override fun getItemCount() = dogList.size

    override fun onBindViewHolder(holder: DogViewHolder, position: Int) {
        holder.view.name.text = dogList[position].dogBreed
        holder.view.lifespan.text = dogList[position].lifeSpan
    };

    fun updateDogList(newDogsList : List<DogBreed>)
    {
        dogList.clear();
        dogList.addAll(newDogsList)
        notifyDataSetChanged()
    }
}
```
