У меня есть RecyclerView с 3 различными типами ViewTypes. Если я прокручиваю список, то для начальных нескольких пунктов он показывает подергивание / дрожание во время прокрутки. Когда RecycledViewPool заполнен до максимального предела, тогда, когда представления используются повторно, прокрутка становится плавной. Итак, я думал сделать RecycledViewPool предварительно готовым. Я попытался создать несколько виджетов и добавил их в пул до того, как пользователь начнет прокручивать. Но пул показывает 0 отсчетов для представлений, вставленных вручную. Он показывает правильный счет, когда RecyclerView сам добавляет представление в пул при прокрутке. Я использую следующий метод для достижения этой цели. Это хорошая идея? или есть более точное решение для этого?
private void addDummyRecycledViews() {
int size = demoAdaptor.getList().size() > 7 ? 7 : demoAdaptor.getList().size();
RecyclerView.RecycledViewPool recycledViewPool = recyclerView.getRecycledViewPool();
for (int i = 0; i < size; i++) {
BaseViewHolder viewHolder = null;
int viewType = demoAdaptor.getItemViewType(i);
int recycledViewCount = recycledViewPool.getRecycledViewCount(viewType);
AppLogger.d("usm_test_adapter_dummy", "viewType= "+viewType+" ,recycledViewCount= "+recycledViewCount);
switch (viewType) {
case VIEW_TYPE_SIMPLE:
AppLogger.d("usm_test_adapter_dummy", "generate VIEW_TYPE_SIMPLE");
viewHolder = demoAdaptor.createSimpleItemViewHolder(recyclerView);
break;
case VIEW_TYPE_SEARCH:
AppLogger.d("usm_test_adapter_dummy", "generate VIEW_TYPE_SEARCH");
viewHolder = demoAdaptor.createSearchItemViewHolder(recyclerView);
break;
case VIEW_TYPE_VIDEO:
AppLogger.d("usm_test_adapter_dummy", "generate VIEW_TYPE_VIDEO");
viewHolder = demoAdaptor.createVideoItemViewHolder(recyclerView);
break;
}
if (viewHolder != null) {
demoAdaptor.onBindViewHolder(viewHolder, i);
recycledViewPool.putRecycledView(viewHolder);
}
}
recyclerView.setRecycledViewPool(recycledViewPool);
}