引言
Kotlin的学习,纸上谈兵终觉浅,绝知此事要躬行!今天就来使用Kotlin语言实现Android中最常使用的RecyclerView控件,并为每个Item添加点击事件。对比来看我的这篇博客Java版RecyclerView实现,就可以发现相对于Java而言Kotlin代码的简约大气风范了,简直羡煞旁人,快@你的小伙伴学习起来吧!
用法
第一步:布局文件(主+子)
- 主布局文件
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".display.Kotlin02"
tools:ignore="MissingConstraints">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:textSize="20sp"
android:gravity="center"
android:background="@color/green"
android:textColor="@color/white"
android:layout_height="?android:attr/actionBarSize"
android:text="kotlin中的Recycler" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/mRecycler"
app:layout_constraintTop_toBottomOf="@id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</androidx.constraintlayout.widget.ConstraintLayout>
-
子布局文件
R.layout.recycler_item
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/mine_title"
android:layout_width="match_parent"
android:layout_height="80dp"
android:textSize="16dp"
android:textColor="@color/black"
tools:text="测试一下"
android:gravity="center"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>
第二步:创建Adapter(含点击事件)
/**
* @data on 2020/9/25 9:05 AM
* @auther armStrong
* @describe Recycler使用
*/
class RecyclerAdapter(private val textList: ArrayList<String>) :
RecyclerView.Adapter<RecyclerAdapter.MyViewHolder>() {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): MyViewHolder {
val view =
LayoutInflater.from(parent.context).inflate(R.layout.recycler_item, parent, false)
return MyViewHolder(view)
}
override fun getItemCount(): Int = textList.size ?: 0
override fun onBindViewHolder(holder: RecyclerAdapter.MyViewHolder, position: Int) {
val textpos = textList[position]
holder.title.text = textpos
holder.itemView.setOnClickListener {
Toast.makeText(holder.itemView.context, "${holder.title.text}", Toast.LENGTH_SHORT)
.show()
}
}
class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val title: TextView = itemView.findViewById(R.id.mine_title)
}
}
第三步:在Activity中书写业务逻辑
Tips: apply plugin: 'kotlin-android-extensions'
在你的app下build.gradle文件中添加这个(头部添加),就可以直接 “控件id.对象方法” 开心编程了,告别了Java中繁琐的findViewById()。当然你要是非要用Java写法来初始化控件也是可以的。
class Kotlin02 : AppCompatActivity() {
private val textList = arrayListOf("我的关注","通知开关", "我的徽章", "意见反馈", "我要投稿",
"我的关注","通知开关", "我的徽章", "意见反馈", "我要投稿",
"我的关注","通知开关","我的徽章","意见反馈","我要投稿")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_kotlin02)
//使用Recycler
val layoutManager = LinearLayoutManager(this)
mRecycler.layoutManager = layoutManager
val adapter = RecyclerAdapter(textList)
mRecycler.adapter = adapter
}
}