Android TV: El elemento de RowsFragment no funciona en pocos casos
Estoy trabajando en una aplicación de Android TV y estoy enfrentando un extraño problema relacionado con los oyentes de clic de artículo: todo funciona bien, pero a veces el clic no se propaga, es muy probable que el oyente no esté configurado.
He subclasificado RowsFragment
y estoy mostrando mis imágenes con filas de 6 elementos: significa que cada fila de la cuadrícula es en realidad una fila en el adaptador, aunque visualmente las fotos tienen el mismo mes. Por favor, eche un vistazo a la imagen para tener una mejor comprensión.
- Cómo cambiar el color de fondo del área de información en un ImageCardView?
- Fusión del manifiesto de Gradle de Android falló
- Quitar SearchOrbView Android TV
- Errores de compilación de androidtv-Leanback-master
- Implementación de un cuadro de diálogo de archivo en Android TV Leanback
Ahora el problema: cuando inicie la aplicación y me desplazo hacia abajo, la primera fila que no es visible en la imagen de arriba (por lo que la cuarta fila, ya que aquí se procesan 3 filas), no recibe mis "clics", no pasa nada . Esto podría ser cierto también para las filas 5, 6, …, pero luego (no reconocí un patrón) las filas empiezan a ser de nuevo clicable (es decir, 8, 9, ..) Las primeras 3 filas son siempre clickable así .
Si vuelvo a desplazarme hacia arriba y las filas que no se pueden hacer clic en aparecerán en la pantalla de nuevo, ahora se pueden hacer clic.
En el onCreate
del fragmento, llamo:
setOnItemViewClickedListener(new ItemViewClickedListener());
Y de acuerdo con la documentación esto debería anular el oyente establecido por la vista de elemento único. También se sugiere establecer un oyente, no ambos: de hecho, sólo se establece este para el fragmento.
En la clase Presenter
del elemento de una sola fila, he intentado agregar un oyente de clics en el onCreateViewHolder
para la vista y he descubierto que cuando se produce el problema, este oyente se llama.
Por lo tanto, parece que en algunas circunstancias, el oyente de fragmentos en general no anula el oyente de vista o no se establece en absoluto.
Lo que también me preocupa acerca de este problema, es que no puedo reproducirlo en el modo de depuración cuando establezco puntos de interrupción y detengo la animación de desplazamiento.
Estoy usando la última versión de Leanback:
compile 'com.android.support:leanback-v17:25.3.1'
El problema es reproducible en el Nvidia Shield TV (Android 7.0), no está seguro de otros dispositivos.
Actualización: lo que también es interesante es el hecho de que cuando un elemento no se puede hacer clic en una fila, esperaría que todos los elementos de la misma fila no se puedan hacer clic. En su lugar no es el caso, algunos son clicables, otros no.
Actualización 2: parece que el método onBind
, en algunas ocasiones, encuentra getOnItemViewClickedListener
para devolver null, por lo que el elemento de escucha de clics no está establecido. Eso es raro porque el oyente está configurado para la clase RowsFragment
principal y funciona bien para la mayoría de los elementos, también los elementos en la misma fila de los que no funcionan.
Como solución, he encontrado esta solución: subclase el ListRowPresenter
y establezca un ListRowPresenter
clic ficticio.
private class GroupedListRowPresenter extends ListRowPresenter { GroupedListRowPresenter(int focusZoomFactor) { super(focusZoomFactor); } @Override protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) { super.onBindRowViewHolder(holder, item); holder.setOnItemViewClickedListener(new BaseOnItemViewClickedListener() { @Override public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, RowPresenter.ViewHolder rowViewHolder, Object row) { Timber.d("item click from dummy listener: this should never happen!"); } }); } }
No estoy cómodo con él, porque realmente no me gusta establecer un oyente de clic vacío, incluso si sé que se sobrepasará.
Actualización 3: el problema también es reproducible con la aplicación de ejemplo creada por Android Studio, por lo que parece no estar relacionada con algo malo en mi código. Por esta razón, he presentado un error: https://issuetracker.google.com/issues/62443122
Si está afectado por este problema también, por favor protagonice el problema anterior, por lo que obtendrá más atención, gracias.
- Desplácese hasta la posición determinada en Android Leanback ListRow
- Personaliza tu estilo ImageCardView (no el contenido)
- Android TV: VerticalGridFragment sombra dimensión y color
- Agregar elementos en BrowseFragment Header en Android TV
- Reutilizando AndroidTV RowsFragment fuera de BrowseFragment
- Multiple ListRows para cada encabezado en BrowseFragment - Biblioteca de Leanback
He experimentado el mismo problema, pero la actualización a la versión de soporte de la biblioteca 25.4.0
arreglado esto. Ten en cuenta que desde el 25.4.0 debes incluir
maven { url "https://maven.google.com" }
En los repositorios. Consulte Programación de la biblioteca de soporte técnico .