Как я могу предварительно подготовить RecycledViewPool RecyclerView, чтобы избежать начальных рывков при прокрутке? - PullRequest
0 голосов
/ 05 марта 2020

У меня есть 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);

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...