【发布时间】:2020-12-31 04:11:18
【问题描述】:
我正在用 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 上设置监听器的最佳方式吗?
【问题讨论】:
-
为什么要用触摸监听器来实现它?有什么理由你没有在 RecyclerViewAdapter 中实现你的点击监听器
-
我不太清楚我为什么使用这种方法,我在网上寻找解决方案,找到了。你知道我们可能使用这种方法而不是另一种的原因是什么吗?
标签: android kotlin android-recyclerview onclicklistener