[英]Item click listener not working on a Auto Scrolling Recyclerview
我正在使用下面的代码自动滚动我的回收站视图。
private final Runnable SCROLLING_RUNNABLE = new Runnable() {
@Override
public void run() {
mRecyclerView_news.smoothScrollBy(pixelsToMove, 0);
mHandler.postDelayed(this, duration);
}
};
private void scrollRV(){
final LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
mRecyclerView_news.setLayoutManager(layoutManager);
mRecyclerView_news.setHasFixedSize(true);
mAdapter = new NewsAdapter(MainActivity.this, newsList, this);
mRecyclerView_news.setAdapter(mAdapter);
mHandler.postDelayed(SCROLLING_RUNNABLE, 500);
}
我也在实现一个 Click 侦听器,但是当 Recyclerview 滚动时,没有任何项目被点击。 当 recyclerview 不滚动时,单击侦听器工作正常。
我如何克服这个问题?
我有一个类似的问题,是因为我有一个回收器视图和一个滚动视图。 由于它们都是垂直滚动,因此影响了我的 OnCLickListener。 嵌套滚动视图或只是将滚动视图完全取出对我有用。 希望这可以帮助!
在您的活动文件中编写这些接口和类
interface ClickListener {
fun onClick(view: View?, position: Int)
fun onLongClick(view: View?, position: Int)
}
open class RecyclerTouchListener(
context: Context?,
recycleView: RecyclerView,
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) {}
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))
}
}
})
}
}
在回收者视图上实施
rvAds.addOnItemTouchListener( RecyclerTouchListener(mActivity,rvAds,object :ClickListener{
override fun onClick(view: View?, position: Int) {
val layout = view!!.mainlayoutAds
val intent = Intent(mActivity, AdsDetailsActivity::class.java)
intent.putExtra(AdsDetailsActivity.TITLE, list[position].massage)
intent.putExtra(AdsDetailsActivity.IMAGE, list[position].image)
intent.putExtra(AdsDetailsActivity.MESSAGE, list[position].massage)
startActivity(intent)
layout.setOnClickListener {
}
}
override fun onLongClick(view: View?, position: Int) {
}
}))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.