【问题标题】:RecyclerView programmatically clickRecyclerView 以编程方式单击
【发布时间】:2015-10-26 00:24:47
【问题描述】:

我正在尝试以编程方式单击 recyclerView 的一个项目。我正在使用:

recyclerView.findViewHolderForAdapterPosition(index).itemView.performClick();

当索引是可见项目时,这非常有效。如果项目不可见(例如,在回收站视图的最后一个位置),则会引发异常。

我能做什么?

【问题讨论】:

标签: java android android-recyclerview android-adapter


【解决方案1】:

我刚刚和你有一个类似的问题。我已经解决了!这就是我所做的。

xxx.mRecyclerView.postDelayed(new Runnable() {
            @Override
            public void run() {
                xx.mRecyclerView.scrollToPosition(position);
            }
        },300);


        xxx.mRecyclerView.postDelayed(new Runnable() {
            @Override
            public void run() {
                xxx.mRecyclerView.findViewHolderForAdapterPosition(position).itemView.performClick();
                }
            },400);
        }

您可以滚动到特定项目,然后执行单击。 因为doc

如果给定位置的项目没有布局,则不会创建一个新的。

但我知道适配器有数据,所以先滚动到它,findViewHolderForAdapterPosition不会为空。

还有一点,不知道你是怎么用RecyclerView的。在我的应用程序中,我在片段中使用它,我不知道为什么要延迟它滚动并执行点击。 (可能是生活圈的原因吧?)。不过这个真的很管用。

【讨论】:

    【解决方案2】:

    你可以直接调用onClick,假设视图管理它自己的点击监听器。

    View view = recyclerView.findViewHolderForAdapterPosition(index).itemView;
    view.onClick(view);
    

    如果点击监听器位于其他地方,您只需要使用onClick 方法获取对该对象的引用,并使用正确的视图作为参数调用它。

    【讨论】:

    • 我已经尝试过你的解决方案,但是当项目不可见时我得到空指针异常
    【解决方案3】:

    在 kotlin 和 viewBinding 上试试这个

     viewBinding.catList.post {
                val view = viewBinding.catList.findViewHolderForAdapterPosition(0)?.itemView?.findViewById<CheckBox>(R.id.catButton)
                view?.callOnClick()
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-30
      • 2013-10-09
      • 2011-10-22
      • 2015-03-17
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 2017-06-17
      相关资源
      最近更新 更多