我有一个回收者视图,我想点击其中一个项目。
这是我的代码:
mRecyclerView.findViewHolderForAdapterPosition(2).itemView.performClick();
当项目可见时它工作正常,但是当它不可见时我得到一个空指针异常
我也尝试在执行点击之前滚动到位置,但我得到了相同的结果
关于如何解决这个问题的任何想法?
答案 0 :(得分:5)
我用这段代码解决了我的问题
mRecyclerView.getLayoutManager().scrollToPosition(17);
search_list.postDelayed(new Runnable() {
@Override
public void run() {
mRecyclerView.findViewHolderForAdapterPosition(17).itemView.performClick();
}
},50);
创建视图时会有轻微延迟。因此,如果在创建视图符号之前单击该项目,则会发生NPE
答案 1 :(得分:2)
不幸的是,这是按预期工作的。当子视图滚动到RecyclerView的边界之外时,子视图通常被重用以显示列表中另一个位置的另一个项目,因此您将获得不再显示的位置的空视图。
您可以做的是在RecyclerView.Adapter上实现getItem()以检索该位置的项目。不确定这是否满足您的要求。
答案 2 :(得分:0)
建议使用侦听器等待绘图完成, 然后执行所需的操作。
recyclerView.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// At this point the layout is complete
recyclerView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});