使用 Anko 写 RecyclerView

单个条目

import android.graphics.Color
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import org.jetbrains.anko.*

class MovieUI : AnkoComponent{

    companion object {
        const val tvTitleId = 1
        const val tvYearId = 2
    }

    override fun createView(ui: AnkoContext): View = with(ui){
        verticalLayout {
            lparams(matchParent, wrapContent)
            padding = dip(16)

            textView {
                id = tvTitleId
                layoutParams = LinearLayout.LayoutParams(matchParent, wrapContent)
                text = "Sherlock"
                textSize = 16f
                textColor = Color.BLACK
            }

            textView {
                id = tvYearId
                layoutParams = LinearLayout.LayoutParams(matchParent, wrapContent)
                text = "2009"
                textSize = 14f
            }
        }
    }
}

adapter

import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import me.maybeiwill.copylatitudelongitude.ui.MovieUI
import org.jetbrains.anko.AnkoContext

data class Movie(var title: String, var year: Int)
class MovieAdapter(private var movies: ArrayList) :
    RecyclerView.Adapter() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MovieViewHolder {
        return MovieViewHolder(MovieUI().createView(AnkoContext.create(parent.context, parent)))
    }

    override fun onBindViewHolder(holder: MovieViewHolder, position: Int) {
        val movie = movies[position]
        holder.tvTitle.text = movie.title
        holder.tvYear.text = "${movie.year}"
    }

    override fun getItemCount(): Int {
        return movies.size
    }

    inner class MovieViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        var tvTitle: TextView = itemView.findViewById(MovieUI.tvTitleId)
        var tvYear: TextView = itemView.findViewById(MovieUI.tvYearId)
    }
}

activity

recyclerView.layoutManager = LinearLayoutManager(this)

val list: ArrayList = arrayListOf()
list.add(Movie("Sherlock Holmes",2009))
list.add(Movie("The Shawshank Redemption",1994))
list.add(Movie("Forrest Gump",1994))
list.add(Movie("Titanic",1997))
list.add(Movie("Taxi",1998))
list.add(Movie("Inception",1994))
list.add(Movie("The Imitation Game",2014))

recyclerView.adapter = MovieAdapter(list)

你可能感兴趣的:(使用 Anko 写 RecyclerView)