学习了类和函数,那我们就可以简单的使用我们学习的知识:用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)
}
}