RecyclerView以编程方式单击

hel*_*ind 3 java android android-adapter android-recyclerview

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

recyclerView.findViewHolderForAdapterPosition(index).itemView.performClick();
Run Code Online (Sandbox Code Playgroud)

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

我能做什么?

小智 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);
        }
Run Code Online (Sandbox Code Playgroud)

您可以滚动到特定项目,然后执行单击.因为医生

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

但我知道适配器有数据,所以首先滚动到它,并且findViewHolderForAdapterPosition不会为null.

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


ste*_*eve 3

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

View view = recyclerView.findViewHolderForAdapterPosition(index).itemView;
view.onClick(view);
Run Code Online (Sandbox Code Playgroud)

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

  • 我已经尝试过您的解决方案,但当该项目不可见时,我收到空指针异常 (4认同)