RecyclerView 以编程方式单击
RecyclerView programmatically click
我正在尝试以编程方式单击 recyclerView 的项目。我正在使用:
recyclerView.findViewHolderForAdapterPosition(index).itemView.performClick();
当索引是可见项时,这非常有效。如果项目不可见(例如,在 recyclerview 的最后位置),则会抛出异常。
我能做什么?
您可以直接调用 onClick
,假设该视图管理其自己的点击侦听器。
View view = recyclerView.findViewHolderForAdapterPosition(index).itemView;
view.onClick(view);
如果点击侦听器位于其他地方,您只需使用 onClick
方法获取对象的引用,并使用正确的视图作为参数调用它。
我刚刚遇到了与 yours.And 类似的问题,我已经解决了!这是我所做的。
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 说
If the item at the given position is not laid out, it will not create a new one.
但我知道适配器有数据,所以先滚动到它,findViewHolderForAdapterPosition
不会为空。
还有一点,我不知道你是怎么使用RecyclerView的。在我的应用程序中,我在一个片段中使用它,我不知道为什么我们要延迟它滚动和执行点击。 (可能是生活圈的缘故吧?)不过这个真的有用
为 kotlin 和 viewBinding 试试这个
viewBinding.catList.post {
val view = viewBinding.catList.findViewHolderForAdapterPosition(0)?.itemView?.findViewById<CheckBox>(R.id.catButton)
view?.callOnClick()
}
我正在尝试以编程方式单击 recyclerView 的项目。我正在使用:
recyclerView.findViewHolderForAdapterPosition(index).itemView.performClick();
当索引是可见项时,这非常有效。如果项目不可见(例如,在 recyclerview 的最后位置),则会抛出异常。
我能做什么?
您可以直接调用 onClick
,假设该视图管理其自己的点击侦听器。
View view = recyclerView.findViewHolderForAdapterPosition(index).itemView;
view.onClick(view);
如果点击侦听器位于其他地方,您只需使用 onClick
方法获取对象的引用,并使用正确的视图作为参数调用它。
我刚刚遇到了与 yours.And 类似的问题,我已经解决了!这是我所做的。
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 说
If the item at the given position is not laid out, it will not create a new one.
但我知道适配器有数据,所以先滚动到它,findViewHolderForAdapterPosition
不会为空。
还有一点,我不知道你是怎么使用RecyclerView的。在我的应用程序中,我在一个片段中使用它,我不知道为什么我们要延迟它滚动和执行点击。 (可能是生活圈的缘故吧?)不过这个真的有用
为 kotlin 和 viewBinding 试试这个
viewBinding.catList.post {
val view = viewBinding.catList.findViewHolderForAdapterPosition(0)?.itemView?.findViewById<CheckBox>(R.id.catButton)
view?.callOnClick()
}