kotlin学习day4:类和函数的使用

学习了类和函数,那我们就可以简单的使用我们学习的知识:用Kotlin完成一个RecyclerView展示简单的列表


1.创建一个Kotlin Class,名为:ArticlesActivity并加载布局

class ArticlesActivity : Activity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.lbj_act_articles)
    }
}

activity的布局

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/lbj_articles_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>

</FrameLayout>

2.在onCreate中初始化我们的控件:

//创建一个List并初始化
var articlesTitles: List<String> = listOf("1", "2", "3", "4", "5", "6")
//初始化RecyclerView
var vArticles: RecyclerView = find(R.id.lbj_articles_view)
//设置recyclerView的布局管理器
vArticles.layoutManager = LinearLayoutManager(this)
//设置适配器
vArticles.adapter = ArticlesAdapter(articlesTitles, this)

3.编写我们的适配器,继承自RecyclerView.Adapter,并编写我们自己的ViewHolder

class ArticlesAdapter(articleTitles: List<String>, context: Context) : RecyclerView.Adapter<ArticlesAdapter.ArticlesViewHolder>() {

}

 class ArticlesViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        var vTitle: TextView = itemView.find(R.id.lbj_articles_title)
    }

首先有一个含两个参数的主要构造函数,然后在init方法块中初始化变量

  var articleTitles: List<String> = listOf()//初始化使其不为null
    var mContext: Context? = null//可以为null

    init {
        this.articleTitles = articleTitles
        this.mContext = context
    }

当然也可以

var articleTitles: List<String> = articleTitles
var mContext: Context = context

更可以在主要构造方法中直接申明,当做全局变量处理

class ArticlesAdapter(var articleTitles: List<String>, var context: Context) : RecyclerView.Adapter<ArticlesAdapter.ArticlesViewHolder>() {

}

在需要的地方直接使用articleTitles和context就行


然后重写onBindViewHolder和onCreateViewHolder,getItemCount三个方法

/**
     * TextView赋值直接使用.text=
     */
    override fun onBindViewHolder(holder: ArticlesViewHolder, position: Int) {
        holder.vTitle.text = articleTitles[position]
    }

    /**
     * 创建对象并返回,不使用new关键字
     */
    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ArticlesViewHolder {
        return ArticlesViewHolder(View.inflate(mContext, R.layout.lbj_apt_articles_item, null))
    }

    /**
     * 函数返回值为表达式,直接使用=
     */
    override fun getItemCount(): Int = articleTitles.size

这样使用Kotlin展示一个RecyclerView就完成了.附完整代码
Activity:

class ArticlesActivity : Activity() {

    //创建一个List并初始化
    var articlesTitles: List<String> = listOf("1", "2", "3", "4", "5", "6")

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.lbj_act_articles)

        //初始化RecyclerView
        var vArticles: RecyclerView = find(R.id.lbj_articles_view)
        //设置recyclerView的布局管理器
        vArticles.layoutManager = LinearLayoutManager(this)
        //设置适配器
        vArticles.adapter = ArticlesAdapter(articlesTitles, this)

    }
}

Adapter:

class ArticlesAdapter(articleTitles: List<String>, context: Context) : RecyclerView.Adapter<ArticlesAdapter.ArticlesViewHolder>() {

    /**
     * 定义属性的时候直接使用主要构造函数的参数(没有注明可为null)初始化
     * 当然也可以在主要构造方法中直接申明,当做全局变量处理ArticlesAdapter(var articleTitles: List<String>, var context: Context)
     */
    //var articleTitles: List<String> = articleTitles
    //var mContext: Context = context

    var articleTitles: List<String> = listOf()//初始化使其不为null
    var mContext: Context? = null//可以为null

    init {
        this.articleTitles = articleTitles
        this.mContext = context
    }

    fun setData(articleTitles: List<String>): Unit {
        this.articleTitles = articleTitles
        notifyDataSetChanged()
    }

    /**
     * TextView赋值直接使用.text=
     */
    override fun onBindViewHolder(holder: ArticlesViewHolder, position: Int) {
        holder.vTitle.text = articleTitles[position]
    }

    /**
     * 创建对象并返回,不使用new关键字
     */
    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ArticlesViewHolder {
        return ArticlesViewHolder(View.inflate(mContext, R.layout.lbj_apt_articles_item, null))
    }

    /**
     * 函数返回值为表达式,直接使用=
     */
    override fun getItemCount(): Int = articleTitles.size

    /**
     * 适配器内部的ViewHolder类,继承自RecyclerView.ViewHolder
     */
    class ArticlesViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        var vTitle: TextView = itemView.find(R.id.lbj_articles_title)
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值