RecyclerView以编程方式单击

时间:2015-10-26 00:24:48

标签: java android android-recyclerview android-adapter

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

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

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

我该怎么办?

3 个答案:

答案 0 :(得分:6)

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

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。在我的应用程序中,我在片段中使用它,我不知道为什么我们应该延迟它滚动并执行单击。 (也许是因为生命圈?)。但这确实有效。

答案 1 :(得分:2)

您可以直接致电onClick,假设该视图管理自己的点击监听器。

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

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

答案 2 :(得分:2)

尝试使用kotlin和viewBinding

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