Android ListView: detecta si los datos de ListView se ajustan a la pantalla sin desplazarse

Posible duplicado:
Android: using notifyDataSetChanged y getLastVisiblePosition – cuando el listView se actualiza realmente?

Tengo un ListView simple con solamente algunas entradas. Dependiendo del tamaño del dispositivo y la orientación, el ListView necesita desplazarse o no.

También tengo una imagen en la pantalla, que no es realmente necesario. Me gustaría quitar la imagen si no hay suficiente espacio para el ListView sin desplazamiento.

Cuando lleno mi ListView en el onCreate de la actividad, el getLastVisiblePosition () aún no es válido, devuelve -1. Por lo tanto, no puedo comparar el último elemento visible con el recuento de listas.

Int lastVisiblePos = listView.getLastVisiblePosition (); // devuelve -1

(Si hago clic en un botón más tarde para volver a comprobar, el valor es correcto.)

El uso de onScrollingListener es demasiado tarde, ya que la imagen no debe mostrarse en primer lugar.

Estoy desarrollando en API nivel 10.

¿Alguna sugerencia?

Compare getLastVisiblePosition() con getCount() en un Runnable para ver si todo el ListView se ajusta a la pantalla tan pronto como se ha dibujado. También debe comprobar si la última fila visible se ajusta totalmente a la pantalla.

Cree el Runnable:

 ListView listView; Runnable fitsOnScreen = new Runnable() { @Override public void run() { int last = listView.getLastVisiblePosition(); if(last == listView.getCount() - 1 && listView.getChildAt(last).getBottom() <= listView.getHeight()) { // It fits! } else { // It doesn't fit... } } }; 

En onCreate() coloque su Runnable en el Handler de ListView:

 listView.post(fitsOnScreen); 

¿Por qué estás buscando problemas? En lugar de su idea puede utilizar 3 diseños:

  1. Widgets si es necesario – encabezado
  2. ListView – diseño principal
  3. ImageView u otros widgets – pie de página

 ListView lv = (ListView) findViewById(R.id.listView); View header = getLayoutInflater().inflate(R.layout.header_layout, null); View footer = getLayoutInflater().inflate(R.layout.foorer_layout, null); lv.addHeaderView(headerComment); lv.addFooterView(footerComment); 
  • ¿Por qué ListView.getCheckedItemPositions () no devuelve valores correctos?
  • Android: ¿Cómo hacer que las filas de un ListView tengan alturas variables?
  • OpenGLRenderer, se encontró el glifo no válido
  • Botón de Android en el elemento ListView para cambiar el texto en la misma fila
  • Posición ListView onStart
  • Agregar botón a cada fila de la vista de lista
  • Cómo establecer el ancho de la ListView en un PopupWindow en Android?
  • Android: listview item width fill_parent no funciona
  • Cómo cambiar el color del texto del elemento de lista simple
  • Cómo cargar el ListView "sin problemas" en android
  • Crear ListView programaticamente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.