RecyclerView дергается при прокрутке, когда дети различаются по высоте - PullRequest
0 голосов
/ 15 октября 2018

Мой пользовательский интерфейс состоит из RecyclerView, который показывает текстовые записи в TextViews.Реализация не очень сложная, ViewHolder сохраняет textView в поле, и onBindViewHolder просто вызывает TextView.setText для него.

private List<String> entries;

override fun onBindViewHolder(holder: TextHolder, position: Int) {
    holder.textView.text = entries[position];
}

Когда записи короткие, проблем нет.Однако, когда некоторые или все записи длинные (например, в 2 или 3 раза больше длины экрана), это вызывает внезапные рывки при прокрутке назад, что, на мой взгляд, действительно вызывает дрожь.Это не похоже на задержку, RecyclerView просто плавно прокручивается, а затем сразу же прыгает вверх.Это случается и когда я щелкаю, и когда я медленно тяну.

Кто-нибудь знает, почему это происходит, и есть ли способ это исправить?

1 Ответ

0 голосов
/ 16 октября 2018

Если элемент в адаптере RecyclerView имеет определенный тип представления, RecyclerView также будет предполагать, что он имеет постоянную высоту.Это приведет к тому, что RecyclerView потеряет свое отслеживание при прокрутке.

Я работал над этим, назначая разные ViewType элементам разных размеров при переопределении getItemViewType в адаптере.Это будет работать, если ваши элементы различаются по высоте, но в остальном постоянно отображаются.

Еще одна вещь, которую вы можете попробовать, - сбросить дочернее представление LayoutParams в методе onBindViewHolder() адаптера.Это может привести к обновлению родительского макета и уведомлению об обновленном состоянии дочернего элемента.

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