一、初衷
随着Kotlin的不断普及,很多公司开始完全使用Kotlin进行项目开发,学会使用Kotlin开发android项目变得越来越重要,下面使用Kotlin实现一个RecyclerView的列表
二、代码
由于简单使用RecyclerView实现一个列表及点击事件功能比较简单,代码量较少,所以直接贴代码了
1、Activity代码
class KotlinRecyclerViewActivity : Activity() {
private var list: ArrayList<String>? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_kotlin_listview)
initData()
initView()
}
private fun initData() {
list = ArrayList()
for (i in 1..20) {
list!!?.add("我是条目" + i.toString())
}
}
private fun initView() {
val mRecyclerView = findViewById<RecyclerView>(R.id.rv_list)
val layoutManager = LinearLayoutManager(this)
layoutManager.orientation = LinearLayoutManager.VERTICAL
// layoutManager
mRecyclerView.layoutManager = layoutManager
// itemDecoration
val itemDecoration = DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
itemDecoration.setDrawable(resources.getDrawable(R.drawable.divider_line))
mRecyclerView.addItemDecoration(itemDecoration)
// animation
mRecyclerView.itemAnimator = DefaultItemAnimator()
// setAdapter
val adapter = KotlinRecycleAdapter(this, list)
mRecyclerView.adapter = adapter
// itemClick
adapter!!.setOnKotlinItemClickListener(object : KotlinRecycleAdapter.IKotlinItemClickListener {
override fun onItemClickListener(position: Int) {
Toast.makeText(applicationContext, list!![position], Toast.LENGTH_SHORT).show()
}
})
}
}
2、Adapter
class KotlinRecycleAdapter : RecyclerView.Adapter<KotlinRecycleAdapter.MyHolder> {
private var list: ArrayList<String>? = null
private var context: Context? = null
private var itemClickListener: IKotlinItemClickListener? = null
constructor (mContext: Context, list: ArrayList<String>?) {
this.context = mContext
this.list = list
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyHolder {
var view = LayoutInflater.from(context).inflate(R.layout.item_multi_column_list, parent, false)
return MyHolder(view)
}
override fun getItemCount(): Int = list?.size!!
override fun onBindViewHolder(holder: MyHolder, position: Int) {
holder?.text?.text = list!![position]
// 点击事件
holder.itemView.setOnClickListener {
itemClickListener!!.onItemClickListener(position)
}
}
class MyHolder(itemView: View?) : RecyclerView.ViewHolder(itemView) {
// !! 断言
var text: TextView = itemView!!.findViewById(R.id.item_text)
}
// 提供set方法
fun setOnKotlinItemClickListener(itemClickListener: IKotlinItemClickListener) {
this.itemClickListener = itemClickListener
}
//自定义接口
interface IKotlinItemClickListener {
fun onItemClickListener(position: Int)
}
}
3、布局文件
activity布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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/rv_list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
item布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/item_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:textColor="@color/color_black"
android:layout_centerHorizontal="true"
android:layout_margin="5dp"
/>
</RelativeLayout>
三、小结
使用kotlin编写项目总结如下:
1、代码量减少,判空变的更加简单
2、Kotlin使用具有推断特点,省去了部分类型转换
3、变量初始化变得更加简单
4、循环使用范围方式可读性较强
例如:for(i in 1..10)
5、需要一定的学习成本,刚开始使用,会有点难受
6、相关资料不完善,遇到问题处理耗时长