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); 
  • Android listview, pase a la acción
  • ¿Por qué ListView.getCheckedItemPositions () no devuelve valores correctos?
  • OnItemClickListener y OnTouchListener personalizado
  • Android: ListView selecciona el elemento y resalta el elemento seleccionado mediante programación
  • Android change listview item color del texto
  • Error: java.lang.IndexOutOfBoundsException: Índice 2 no válido, tamaño es 2
  • Cambiar el color del texto de ListView simple Opción múltiple Android
  • ¿Cómo agregar AdMob como elemento de ListView en Android?
  • Creación de ListView mediante programación
  • Android ListView :: setItemChecked no funciona
  • Using setOnItemClickListener para los elementos de listview
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.