Recycler view off screen Держатель дочернего представления, возвращающий null

У меня 20 дочерних представлений в recyclerView, при запуске видно только 5. Если я попытаюсь получить доступ к держателю дочернего представления вне экрана, возвращается null. Как решить эту проблему?

RecyclerView.ViewHolder holder = recyclerView.findViewHolderForAdapterPosition(i);

holder - это null.

и это должен быть null - в документах написано: «Этот метод проверяет только дочерние элементы RecyclerView. Если элемент в данной позиции не выложен, он не создаст новый».

pskink 11.02.2019 09:29
0
1
920
2

Ответы 2

если вам действительно нужен доступ к элементу на выключенном экране, вы можете попробовать этот мой код:

for(int i = 0; i<Objects.requireNonNull(recyclerView.getAdapter()).getItemCount(); i++) {
        if (recyclerView.findViewHolderForLayoutPosition(i) != null) {
            View childView = Objects.requireNonNull(recyclerView.findViewHolderForLayoutPosition(i)).itemView;
            ImageView childCheckThumb = childView.findViewById(R.id.thumb_check);
            TextView namePlateView = childView.findViewById(R.id.name_plate_text_view);
            childCheckThumb.setVisibility(thumb);
        }
    }

в моем случае я получаю доступ, чтобы проверить весь список за пределами экрана, надеюсь, это может решить вашу проблему

Он должен быть нулевым, см. документация

Recycle (view): A view previously used to display data for a specific adapter position may be placed in a cache for later reuse to display the same type of data again later. This can drastically improve performance by skipping initial layout inflation or construction.

Итак, вы можете видеть, что виды, которых нет на экране, не будут генерироваться, и, таким образом, метод recyclerView.findViewHolderForAdapterPosition(i); вернет ноль.

Другие вопросы по теме