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

来源:互联网 发布:软件公寓什么时候预约 编辑:程序博客网 时间:2024/06/05 02:31

学习了类和函数,那我们就可以简单的使用我们学习的知识:用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")//初始化RecyclerViewvar 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> = articleTitlesvar 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)    }}
原创粉丝点击