尝试以编程方式执行单击不可见的Recycler视图项时出现空指针异常

时间:2015-10-28 17:29:22

标签: android android-recyclerview recycler-adapter

我有一个回收者视图,我想点击其中一个项目。

这是我的代码:

mRecyclerView.findViewHolderForAdapterPosition(2).itemView.performClick();

当项目可见时它工作正常,但是当它不可见时我得到一个空指针异常

我也尝试在执行点击之前滚动到位置,但我得到了相同的结果

关于如何解决这个问题的任何想法?

3 个答案:

答案 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);
        }
    });