Android TV RecyclerView focus interaction

j'utilise actuellement un normal RecyclerView avec GridLayoutManager avec un différent spanCount dépendant du viewType pour une application Android TV. Tout fonctionne bien mais j'ai 2 problèmes:

  1. si vous appuyez longtemps sur le dpad vers le bas pour faire défiler rapidement entre les éléments parfois la mise au point est perdue à une vue qui n'est pas un enfant de la RecyclerView.
  2. Comment puis-je dire au RecyclerView de garder la vue concentrée actuelle dans le centre de la grille?

il semble que les problèmes énumérés soient résolus en utilisant la bibliothèque VerticalGridView de LeanBack mais le LayoutManger qu'il utilise est interne et ne supporte pas spanCount .

23
demandé sur Tepes Lucian 2016-08-31 14:09:16

3 réponses

Recycler view fonctionne bien avec android TV.Les solutions possibles que vous pouvez inclure sont:

1.ajouter focusable et focusableInTouchode à vue.Ajoutez focusListner à travers le code et demandez focus à chaque fois que la vue est cliquée.

2.Pour garder la vue de Recycler point focalisé dans le centre vous devez Outrepasser le layout manager juste comme cet exemple.

RecyclerView smoothScroll en position centrale. Android

ou

utiliser layoutManager.scrollToPositionWithOffset (position,offset) où la position et l'offset de la vue centrée sur la position est la largeur de la vue du recycleur/2.

1
répondu Anonymous 2017-08-28 10:59:19

vous pouvez essayer de vérifier ce solution de contournement pour le bug avec RecycleView focus scrolling lors de la navigation avec d-pad.

voici le alors question pour cela.

le problème ici, c'est que le GridLayoutManager utilise LinearLayoutManager de la mise en œuvre de onFocusSearchFailed() qui s'appelle lorsque focus approche de la frontière interne de RecyclerView . LinearLayoutManager's mise en œuvre juste offre l'élément premier/dernier (dépend de la direction du défilement). Par conséquent, focus saute au premier/dernier élément de la nouvelle rangée.

alors, peut-être que cette solution résoudra votre problème ou vous donnera une idée sur la façon de résoudre votre problème.

0
répondu KENdi 2017-05-23 12:26:31
  1. pour un recyclage régulier, j'ai dû préciser:

    android: descentfocusability= "beforeDescendants"

aussi android:nextFocusDown="@+id/recyclerviewId " est réglé pour envoyer le focus à RV lui-même.

  1. la seule solution que je vois est un écouteur clé pour sélectionner item to position currentPosition+spancount.
0
répondu Geoffrey 2017-08-29 13:32:01