Получение эффекта мерцания при отображении горизонтального RecyclerView внутри вертикального RecyclerView

У меня есть VerticalRecyclerViewи эта вертикаль RecyclerView's каждый элемент содержит Horizontal RecyclerView, так что я сделал это и работает нормально, за исключением фактора производительности, когда я прокручиваю Vertical RecyclerView вертикальный список мерцает и дает плохое поведение. Я устанавливаю Adapter для горизонтального RecyclerView внутри вертикали RecyclerView поэтому каждый раз при прокрутке я создаю новый адаптер и устанавливаю данные, на самом деле это приводит к производительности. Есть ли способ оптимизировать это?

Код

onBindViewHolder(){
  setHorizontalList(items, horizontalolder);
}

setHorizontalList(ArrayList<Item> items, HorizontalHolder holder){
  MyAdapter adapter = new MyAdapter();
  adapter.setData(items);
  holder.recyclerView.setAdapter(adapter);
  holder.recyclerView.setLayoutManager(new LinearLayoutManager(mContext,
                    LinearLayoutManager.HORIZONTAL, false));
  holder.recyclerView.setHasFixedSize(true);
}

1 ответ

Производительность плохая, потому что вы установили setHasFixedSize(boolean) в true, это приведет к каждому вложенному горизонтали RecyclerView загрузить все свои виды, когда он станет видимым по вертикали RecyclerView, Установка фиксированного размера true обычно используется, чтобы сделать RecyclerView оберните его содержание. Но чтобы обернуть его собственный контент, он должен знать размер его содержимого, поэтому он должен создавать все виды, когда становится видимым (знать его максимальную высоту и ширину).

Лучший способ оптимизировать ваши вложенные RecyclerViews не устанавливать фиксированный размер trueНо это, вероятно, будет причиной вашего вложенного RecyclerViewне будет показан полностью, потому что он не знает его рост (так как различные виды в RecyclerView может иметь разную высоту). Одним из способов решения этой проблемы является использование жестко заданной высоты или создание собственного CustomRecyclerView класс, который расширяется RecyclerView и переопределить методы измерений.

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