web-dev-qa-db-fra.com

Android TV RecyclerView focus interaction

J'utilise actuellement un RecyclerView régulier avec GridLayoutManager avec différents spanCount dépendant du viewType pour une Android TV app Tout fonctionne correctement mais j'ai 2 problèmes:

  1. Si vous appuyez longuement sur le pavé tactile pour faire défiler rapidement entre les éléments, le focus est parfois perdu dans une vue qui n'est pas un enfant de RecyclerView.
  2. Comment puis-je dire au RecyclerView de conserver la vue focalisée actuelle au centre de la grille?

Il semble que les problèmes répertoriés soient résolus en utilisant la bibliothèque VerticalGridView de LeanBack mais la LayoutManger qu'elle utilise est interne et ne prend pas en charge spanCount.

26
Tepes Lucian

La vue Recycleur fonctionne très bien avec Android TV. Les solutions possibles que vous pouvez inclure sont:

1. ajoutez focusable et focusableInTouchode à la vue. Ajoutez focusListner à travers le code et demandez le focus à chaque fois que vous cliquez sur la vue.

2.Pour conserver l'élément focalisé de Recycler View au centre, vous devez remplacer le gestionnaire de mise en page, tout comme cet exemple.

RecyclerView smoothScroll pour se positionner au centre. Android

ou

utilisez layoutManager.scrollToPositionWithOffset (position, offset) où position et décalage de la vue focalisée sur la position est la largeur de vue du recycleur/2.

2
sharath kumar
  1. Pour un RecyclerView normal,

    • Je devais préciser: Android:descendantFocusability="beforeDescendants"

    • Et aussi Android:nextFocusDown="@+id/recyclerviewId" est configuré pour envoyer le focus au RV lui-même.

  2. La seule solution que je vois est un écouteur clé pour sélectionner l'élément à positionner currentPosition + spancount.

2
Geoffrey