问题描述
我正在尝试以编程方式单击 recyclerView 的项目。 我正在使用:
recyclerView.findViewHolderForAdapterPosition(index).itemView.performClick();
当索引是可见项目时,这非常有效。 如果该项目不可见(例如在 recyclerview 的最后一个位置),则抛出异常。
我能做什么?
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);
}
您可以滚动到特定项目,然后执行单击。 因为说
如果给定位置的项目未布置,则不会创建新项目。
但我知道适配器有数据,所以先滚动到它, 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()
}