@ü.li:Listing 1: FrameLayout mit RecyclerView im Layout der MainActivity: @li: @ü.li:Listing 2: Kotlin-Klasse AnimalListAdapter @li:package nz.co.ventego_creative.ixkotlinandroidtutorial.adapters import android.support.v7.widget.RecyclerView import android.view.ViewGroup import android.widget.TextView class AnimalListAdapater(val items: List) : RecyclerView.Adapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { return ViewHolder(TextView(parent.context)) } override fun onBindViewHolder(holder: ViewHolder, position: Int) { holder.textView.text = items[position] } override fun getItemCount(): Int = items.size class ViewHolder(val textView: TextView) : RecyclerView.ViewHolder(textView) } @ü.li:Listing 3: Data Classes in Kotlin für die Modell-Ebene @li:data class PetfinderResult(val petfinder: Petfinder) data class Petfinder(val pets: Pets) data class Pets(val pet: List) data class Pet(val age: String, val size: String, val contact: Contact, val id: Int, val breeds: Breeds, val name: String, val sex: String, val animal: String) data class Breeds(val breedList: List) data class Breed(val breedName: String) data class Contact(val state: String, val city: String, val zip: Int) @ü.li:Listing 4: PetDataDomainMapper mit import-Aliasen und Collection-Lambda @li:import nz.co.ventego_creative.ixkotlinandroidtutorial.model.api.PetfinderResult import nz.co.ventego_creative.ixkotlinandroidtutorial.model.data.Pet import nz.co.ventego_creative.ixkotlinandroidtutorial.model.domain.Pet as PetDomain import nz.co.ventego_creative.ixkotlinandroidtutorial.model.domain.PetList as PetListDomain class PetDataDomainMapper { fun getFromData(result: PetfinderResult): PetListDomain { return PetListDomain(convertPetListToDomain(result.petfinder.pets.pet)) } private fun convertPetListToDomain(list: List): List { return list.map { convertPetItemToDomain(it) } } private fun convertPetItemToDomain(pet: Pet): PetDomain { return PetDomain(pet.age,pet.size,pet.id,pet.name,pet.sex,pet.animal) } } @ü.li:Listing 5: Änderungen in AnimalListAdapter zur Darstellung der dynamisch geladenen Daten @li:class AnimalListAdapter(val items: PetList)... ... override fun onBindViewHolder(holder: ViewHolder, position: Int) { with(items.pets[position]) { holder.textView.text = "$name ($age, $sex, $size)" } } ... override fun getItemCount(): Int = items.pets.size @ü.li:Listing 6: Vereinfachte Struktur des petlist_item-Layout @li: