ListView (Adaptador) elemento de visibilidad oyente
¿Es posible tener un oyente de visibilidad en el elemento de cada lista? Como: en el usuario ve el elemento, hacer algo. En el elemento está oculto, hacer otra cosa.
Quiero comprobar cuándo un elemento "entra" o "sale" del desplazamiento para actualizar una segunda lista.
- FragmentPagerAdapter Deslizar para mostrar ListView 1/3 Anchura de la pantalla
- Android: ListView vertical con filas superpuestas
- Centrarse en EditText en ListView cuando bloquea descendientes (Android)
- No se puede establecer el margen del elemento en ListView mediante adaptador personalizado
- Cómo deshabilitar el elemento de lista particular en la lista de vista en android?
Adicionalmente mi ListView podría expandir como:
adapter.addAll( (Collection<? extends DBObject>) events); adapter.notifyDataSetChanged();
Creo que una forma podría ser utilizar un oyente global para comprobar los elementos, pero me temo que se desordenado si añadir más elementos a la ListView (arriba). Todavía no he logrado nada con eso
eventList.setOnScrollListener(new OnScrollListener() { public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } @Override public void onScrollStateChanged(AbsListView view, int scrollState) {} });
- ¿Cómo evitar recrear Fragment en ViewPager?
- Explicación de state_activated, state_selected, state_pressed, state_focused para ListView
- ¿Repetición de elementos en ListView?
- Fragmento tiene el fondo blanco por defecto en replace () en lugar de uno transparente
- Elemento agregado de enfoque en ExpandableListView
- Mostrar la selección actual en un listview
- Desplazamiento de la lista con botones
- ¿Cómo manejar el efecto Ripple en 9-patch y CardView, y tener control sobre los estados del selector?
Puede utilizar la función onScroll para calcularlo.
eventList.setOnScrollListener(new OnScrollListener() { int oldFirstVisibleItem = 0; int oldLastVisibleItem = 0; public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (firstVisibleItem > oldFirstVisibleItem) { for(int i = oldFirstVisibleItem; i < firstVisibleItem; i++) { onExit(i); } } if (firstVisibleItem < oldFirstVisibleItem) { for(int i = firstVisibleItem; i < oldFirstVisibleItem; i++) { onEnter(i); } } int lastVisibleItem = firstVisibleItem + visibleItemCount - 1; if (lastVisibleItem < oldLastVisibleItem) { for(int i = oldLastVisibleItem+1; i <= lastVisibleItem; i++) { onExit(i); } } if (lastVisibleItem > oldLastVisibleItem) { for(int i = oldLastVisibleItem+1; i <= lastVisibleItem; i++) { onEnter(i); } } oldFirstVisibleItem = firstVisibleItem; oldLastVisibleItem = lastVisibleItem; } @Override public void onScrollStateChanged(AbsListView view, int scrollState) {} }); public void onEnter(int position) { // Handle an item coming into view. } public void onExit(int position) { // Handle an item going out of view. }
La respuesta está en su pregunta.
Uno de los métodos que anula en el onScrollListener () es
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { }
Los parámetros pasados incluyen el firstVisibleItem
y el visibleItemCount
. Puede utilizar estos dos números para determinar qué elementos están actualmente visibles.
Sólo tenga en cuenta que onScroll se llama con mucha frecuencia mientras se desplaza.
- La hormiga más reciente en Fedora 14 es 1,7, pero necesito 1,8 hormigas
- Webview de Android, el archivo de entrada de archivos filechooser no aparece