使用 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<ViewGroup>{

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

    override fun createView(ui: AnkoContext<ViewGroup>): 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<Movie>) :
    RecyclerView.Adapter<MovieAdapter.MovieViewHolder>() {

    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<Movie> = 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)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。