Android: detecta si un ListView tiene la barra de desplazamiento (después de configurar nuevos datos)

Tengo un ArrayAdapter ligado a un ListView.

mListView.setAdapter(mArrayAdapter);

Siempre que restablezco los datos de ArrayList al ArrayAdapter:

 mArrayAdapter.clear(); mArrayAdapter.addAll(mArrayList); mArrayAdapter.notifyDataSetChanged() 

El ListView se actualiza correctamente

Sin embargo, si justo después de las tres líneas anteriores, llamo a mi método personalizado mListView.hasScrollbar() para detectar si el listview tiene una barra de desplazamiento o no, obtengo un valor nulo lastVisibleItem :

 public boolean hasScrollbar() { View lastVisibleItem = (View) getChildAt(getChildCount() - 1); if (lastVisibleItem.getBottom()>=getHeight()) { return true; } return false; } 

¿Significa que el listview sigue actualizando?

Mi pregunta principal es:
¿Cómo puedo probar si el listview tiene la barra de desplazamiento después de restablecer el adaptador con nuevos datos?

¡Gracias por cualquier ayuda!

2 Solutions collect form web for “Android: detecta si un ListView tiene la barra de desplazamiento (después de configurar nuevos datos)”

El uso de getLastVisiblePosition / getFirstVisiblePosition es un método válido para detectar si tiene desplazamiento o no dentro de la vista de lista (mientras lo compara con getCount () y haga su matemática ofc). El problema que tiene ya que ya adivina es que está intentando comprobar fuera de sincronización. Para sincronizar la consulta cuando el adaptador ya llena los datos de la lista y los cambios actualizados, debe publicar una solicitud de publicación en la lista, que apilará esa petición a la cola de mensajes del adaptador.

 yourAdapter.notifyDataSetChanged(); yourAdapter.getListView().post(new Runnable() { @Override public void run() { //your code here } }); 

Asegúrese de llamar después de notifySetDataChanged() por supuesto. Porque desea que la lista se actualice antes de la comprobación.

Creo que su pregunta es igual a "¿cómo saber si la vista de lista contiene elementos que se muestran en más de una pantalla"?

Así que mi sugerencia es usar listView.getFirstVisiblePosition () y getLastVisiblePosition () para decirlo.

  • Actualizar Android ListView
  • NotifyDataSetChanged- RecyclerView -¿Es una llamada asincrónica?
  • Android ParseQueryAdapter notifyDataSetChanged no funciona
  • NotifyDataSetChange no funciona desde un adaptador personalizado
  • Cómo añadir sugerencias dinámicamente a autocompletetextview con preservar el estado de los caracteres
  • Android ListView no se actualiza después de notifyDataSetChanged
  • Android: ListFragment refresh utilizando notifyDataSetChanged () con el adaptador personalizado no funciona
  • Cómo utilizar ListView, ArrayList, ArrayAdapter y notifyDataSetChanged junto con un runnable, y un Handler de mensaje en el hilo principal
  • Cómo proporcionar animación personalizada durante la clasificación (notifyDataSetChanged) en RecyclerView
  • NotifyDataSetChanged no puede actualizar ListView
  • Hace notificydatasetchanged llamada onCreateViewHolder al usar RecyclerView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.