当前位置: 代码迷 >> Android >> RecyclerView 以编程方式单击
  详细解决方案

RecyclerView 以编程方式单击

热度:88   发布时间:2023-08-04 11:58:40.0

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

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

当索引是可见项目时,这非常有效。 如果该项目不可见(例如在 recyclerview 的最后一个位置),则抛出异常。

我能做什么?

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

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);
        }

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

如果给定位置的项目未布置,则不会创建新项目。

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

还有一件事,我不知道你是如何使用RecyclerView的。 在我的应用程序中,我在一个片段中使用它,我不知道为什么要延迟它滚动并执行单击。 (也许是因为生活圈?)但这确实有效。

您可以直接调用onClick ,假设该视图管理自己的点击侦听器。

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

如果单击侦听器位于其他位置,则只需使用onClick方法获取对对象的引用,并使用正确的视图作为参数调用它。

试试这个 kotlin 和 viewBinding

 viewBinding.catList.post {
            val view = viewBinding.catList.findViewHolderForAdapterPosition(0)?.itemView?.findViewById<CheckBox>(R.id.catButton)
            view?.callOnClick()
        }
  相关解决方案