[英]RecyclerView itemClickListener in Kotlin android
我正在用 Kotlin 編寫一個應用程序,但對如何在 Kotlin 中使用帶有 RecyclerView 的 itemClickListener 感到困惑。
這是我的自定義偵聽器
class RecyclerTouchListener(
context: Context?,
recycleView: RecyclerView,
private val clicklistener: ClickListener?) : OnItemTouchListener {
private val gestureDetector: GestureDetector
override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean {
val child = rv.findChildViewUnder(e.x, e.y)
if (child != null && clicklistener != null && gestureDetector.onTouchEvent(e)) {
clicklistener.onClick(child, rv.getChildAdapterPosition(child))
}
return false
}
override fun onTouchEvent(rv: RecyclerView, e: MotionEvent) {}
override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) {}
interface ClickListener {
fun onClick(view: View?, position: Int)
fun onLongClick(view: View?, position: Int)
}
init {
gestureDetector = GestureDetector(context, object : SimpleOnGestureListener() {
override fun onSingleTapUp(e: MotionEvent): Boolean {
return true
}
override fun onLongPress(e: MotionEvent) {
val child = recycleView.findChildViewUnder(e.x, e.y)
if (child != null && clicklistener != null) {
clicklistener.onLongClick(child, recycleView.getChildAdapterPosition(child))
}
}
})
} }//end RecyclerTouchListener class
我試圖在我的 MainActivity 類中使用它
class MainActivity : AppCompatActivity() {
val list:ArrayList<Item> = ArrayList()
val myAdapter =ItemRcyclerAdapter(this , fillItemArray())
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var layoutManager = LinearLayoutManager(this)
val main_item_recycler: RecyclerView= findViewById(R.id.main_item_recycler)
main_item_recycler.adapter=myAdapter
main_item_recycler.setHasFixedSize(true)
main_item_recycler.setLayoutManager(layoutManager)
main_item_recycler.addOnItemTouchListener(RecyclerTouchListener(
this,main_item_recycler, RecyclerTouchListener.ClickListener(){
}))
}//end onCreate()
但是在 RecyclerTouchListener 構造函數中我不能傳遞這個參數“ RecyclerTouchListener.ClickListener() ”對
我該如何覆蓋 ClickListener 接口方法? 它是在 recyclerView 上設置偵聽器的最佳方式嗎?
您可以在適配器內實現點擊偵聽器,而不是實現手勢檢測器來獲取子視圖。 我添加了示例代碼,您可以看到如何實現它:
class YourAdapter: RecyclerView.Adapter<YourAdapter.YourViewHolder>() {
var items: List<YourItem> = emptyList()
var onItemClicked: ((tem: YourItem) -> Unit)? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): YourViewHolder {
// Create your View Holder
}
override fun getItemCount(): Int = items.size
override fun onBindViewHolder(holder: YourViewHolder, position: Int) {
holder.bind(items[holder.adapterPosition])
}
inner class YourViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
fun bind(item: YourItem) {
itemView.setOnClickListener {
onItemClicked?.invoke(item)
}
}
}
}
data class YourItem(
val id: Int,
val name: String
)
class YourActivity: Activity() {
val adapter = YourAdapter()
override fun onStart() {
super.onStart()
adapter.items = // Set your data
adapter.onItemClicked = {
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.