Переключение фокуса на следующую строку во вложенном recyclerview в приложении FireTv

В нашем приложении Fire TV мы используем вложенный просмотрщик, где каждый вертикальный элемент имеет горизонтальную строку в качестве дочернего элемента, например playstore. дизайн.

Прокрутка с помощью dpad работает нормально, но когда я удерживаю правую клавишу в течение нескольких секунд, элемент начинает прокручиваться очень быстро, потому что он получает много событий, и в течение нескольких секунд фокус переходит к следующей случайной строке, даже если в текущей строке есть элементы для прокрутки. Итак, вся эта проблема возникает при горизонтальной прокрутке (дочерний просмотр). Я уже пробовал много решений, таких как это, это, это.

Также пробовал настраиваемый менеджер компоновки, настраиваемый макет фокуса и другие подходы, такие как замедление прокрутки recyclerview и т. Д., Но все не работает.


person FireTvAppsDeveloper    schedule 29.07.2021    source источник


Ответы (1)


Насколько я знаю, это происходит в тот момент, когда последний элемент в фокусе, а следующий элемент не виден, то есть ViewHolder не обновил данные первой ячейки, поэтому непонятно, какой элемент показать следующий, как если бы список закончился.

Нужно сделать так, чтобы хотя бы край следующего элемента всегда был виден на экране.

Возможно, вам следует поиграть с размером ячейки или разделителем.

Редактировать: секрет заключается в использовании библиотеки наклона. Это не потеря фокуса!

  1. Ваша градация:
    // поддержка Leanback

    def leanback_version = реализация 1.2.0-alpha01 (androidx.leanback:leanback:$leanback_version)

  2. Изменение макета с RecyclerView на HorizontalGridView (VerticalGridView)

  3. Изменение импорта фрагментов с RecyclerView.widget.GridLayoutManager на androidx.leanback.widget.GridLayoutManager У меня работает очень быстро, и фокус больше не прыгает.

Вот хорошая статья с анимацией, но немного устаревшая

person kirkadev    schedule 29.07.2021
comment
Спасибо за ответ, я попробую этот подход и дам вам знать. - person FireTvAppsDeveloper; 30.07.2021
comment
Извините за задержку с ответом, я попробовал ваше предложение, но проблема все та же! - person FireTvAppsDeveloper; 03.08.2021
comment
Сейчас как раз для себя делаю такую ​​задачу, сейчас попробую сделать а потом расскажу - person kirkadev; 03.08.2021
comment
Пожалуйста, смотрите мое редактирование в ответе. - person kirkadev; 03.08.2021