繁体   English   中英

项目单击侦听器不适用于自动滚动回收器视图

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM