Obtener la vista de RecyclerView por AdapterPosition
Tengo un RecyclerView con vistas previas video en él. Cuando el usuario se desplaza, los videos se deben reproducir automáticamente en el reciclador. Los elementos visibles para el usuario (cuando el estado de desplazamiento es IDLE).
Así que he escrito un onScrollListener personalizado que pasa las posiciones que son visibles para el usuario como una matriz para el método startVideosOn(int[] positions)
.
- ¿Cómo uso ResourceCursorTreeAdapter con vistas de grupo expandidas y contraídas en Android?
- Creación de LinearLayout en Java - Los elementos no se muestran
- Android XML: Centrando una vista en el diseño relativo- android: layout_centerHorizontal = "true" no funciona?
- Android: EfficientAdapter con dos vistas diferentes
- Uso de dos diseños diferentes para elementos secundarios en ExpandableListView
Pero el problema es cuando quiero obtener la vista por la posición (la posición es igual a la posición del adaptador). Cuando intento linearLayoutManager.getChildAt(index)
consigo null
cuando el 3ro artículo se exhibe, porque el RecyclerView tiene solamente 2 childs, que serán reciclados.
Entonces, ¿cómo puedo obtener la View
del RecyclerView por la posición del adaptador?
Editar, este es el OnScrollListener:
public abstract class AutoPlayRecyclerOnScrollListener extends RecyclerView.OnScrollListener { LinearLayoutManager linearLayoutManager; public AutoPlayRecyclerOnScrollListener(LinearLayoutManager linearLayoutManager) { this.linearLayoutManager = linearLayoutManager; } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (newState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) { int firstVisibleItemPosition = linearLayoutManager.findFirstVisibleItemPosition(); int lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition(); if (firstVisibleItemPosition != -1 && lastVisibleItemPosition != -1) { playOn(firstVisibleItemPosition, lastVisibleItemPosition); } } } private void playOn(int lower, int upper) { int[] completelyVisibleItems = new int[upper - lower + 1]; for (int i = lower, j = 0; i <= upper; i++, j++) { completelyVisibleItems[j] = i; } playOn(completelyVisibleItems); } public abstract void playOn(int[] items); }
- Vista flotante en la pantalla de Android
- Animación de la traducción y ampliación de la vista en Android
- Sincronizar la posición de dos vistas ScrollView
- Cómo obtener la vista del grupo en la lista expandiblelist en android?
- Detección de vistas invisibles en un evento de movimiento
- Android define la altura y el ancho de Vista personalizada mediante programación
- Cómo extender la etiqueta de inclusión en Android
- Ver los valores devueltos getHeight () y getWidth () demasiado grandes
Si necesita obtener una View
para una "posición" visible, utilice:
RecyclerView#findViewHolderForAdapterPosition(int position)
o
RecyclerView#findViewHolderForLayoutPosition(int position)
El ViewHolder
devuelto mantendrá la View
que desea
- Uso de Gson para analizar la matriz y el objeto Json sin nombre
- Android convertView, para usarlo o no?