Kotlin实现的一个小小的RecyclerView列表界面及点击事件的简单处理,只为练习手感
没有什么难度,贴个代码吧:
xml布局文件部分:
<?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=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<?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="100dp"
android:id="@+id/itemview"
android:background="#f4f4f4"
tools:context=".MainActivity">
<View
android:id="@+id/content"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintWidth_percent="0.3"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:background="@drawable/shape_item_bg"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World"
android:textSize="25dp"
app:layout_constraintBottom_toBottomOf="@id/content"
app:layout_constraintEnd_toEndOf="@id/content"
app:layout_constraintStart_toStartOf="@id/content"
app:layout_constraintTop_toTopOf="@id/content" />
</androidx.constraintlayout.widget.ConstraintLayout>
activity部分:
package com.windfallsheng.myktexample
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.windfallsheng.myktexample.MyAdapter.OnRecyclerViewItemClick
class MainActivity : AppCompatActivity() {
// var dataList =
// listOf<String>("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N")
var dataList = ('A'..'Z').toList()
var recyclerview: RecyclerView? = null
var myAdapter: MyAdapter? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
recyclerview = findViewById<RecyclerView>(R.id.recyclerview)
recyclerview?.layoutManager = LinearLayoutManager(this)
myAdapter = MyAdapter(dataList = dataList)
recyclerview?.adapter = myAdapter
// val onRecyclerViewItemClick = object : OnRecyclerViewItemClick<String> {
// override fun OnItemClick(view: View?, t: String?, position: Int) {
// TODO("Not yet implemented")
// }
// }
myAdapter?.mOnRecyclerViewItemClick = object : OnRecyclerViewItemClick<String> {
override fun OnItemClick(view: View?, text: String?, position: Int) {
when (view?.id) {
R.id.itemview -> Toast.makeText(
this@MainActivity,
"点击的item位置是${position}",
Toast.LENGTH_SHORT
).show()
R.id.content -> Toast.makeText(
this@MainActivity,
"点击的item是$text",
Toast.LENGTH_SHORT
).show()
}
}
}
}
}
适配器部分:
package com.windfallsheng.myktexample
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.Adapter
class MyAdapter(var dataList: List<Char>?) : Adapter<MyAdapter.MyViewHolder>() {
var mOnRecyclerViewItemClick: OnRecyclerViewItemClick<String>? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val view = LayoutInflater.from(parent?.context).inflate(R.layout.rv_item, parent, false)
return MyViewHolder(view)
}
override fun getItemCount(): Int {
return dataList?.size ?: 0
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
var context = holder.itemView.context
val content = dataList?.get(position).toString()
holder.tvText.text = content
// item点击事件的处理
holder.itemView.setOnClickListener {
mOnRecyclerViewItemClick?.OnItemClick(holder.itemView, content, position)
}
// item点击事件的处理
holder.tvContent.setOnClickListener {
mOnRecyclerViewItemClick?.OnItemClick(holder.tvContent, content, position)
}
}
class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var tvContent: View = itemView.findViewById(R.id.content)
var tvText: TextView = itemView.findViewById(R.id.textview)
}
public interface OnRecyclerViewItemClick<T> {
fun OnItemClick(view: View?, t: T?, position: Int)
}
}
由于作者水平有限,语言描述及代码实现中难免有纰漏,望各位看官多提宝贵意见!
Hello , World !
感谢所有!