Я занимаюсь разработкой приложения для телевизионной платформы и столкнулся с проблемой, когда по умолчанию RecyclerView
с GridLayoutManager
не может правильно обрабатывать управление фокусировкой из DPAD.У него есть следующие проблемы:
- Фокус теряется при слишком быстрой прокрутке списка
- При слишком быстрой прокрутке фокус переходит на первую позицию в списке
- Иногда,при нажатии кнопки вниз DPAD фокус устанавливается с неверным индексом (например, у нас есть 4 столбца, фокус находится на первом элементе, и после нажатия кнопки вниз DPAD он переходит на индекс 5, но он должен переходить на индекс 4)
- Фокус теряется после состояния восстановления восстановления
- Множество других мелких проблем ...
Чтобы избежать такого поведения, я использую VerticalGridView
из leanback
библиотека с дополнительным кодом, и она работает практически идеально - никаких проблем, и она работает с мышью и клавиатурой.Единственное, что я не могу сделать - настроить SpanSizeLoockup
как в «мобильном» GridLayoutManager
, потому что такой функциональности нет.Мне нужно это, чтобы использовать представления заголовка в моем списке с размером пролета для всей ширины в строке.Логика LayoutManager
слишком странна для понимания, и я хочу добиться этого настолько просто, насколько это возможно.
Вопрос: Как я могу добавить функциональность SpanSizeLoockup
к VerticalGridView
и ничего там не сломать?
Единственное, что приходит на ум - это использовать пользовательское представление, представляющее одну строку в списке с заголовком, но это также может нарушить логику фокуса.
Заранее спасибо!