Limitar el número de filas de listview

Estoy desarrollando una aplicación que debe emparejarse con otros dispositivos a través de Bluetooth. Estaba teniendo problemas con el fin de mostrar la lista de dispositivos emparejados de manera correcta. También había visto el ejemplo en el api de Android (Bluetooth Chat), pero estaba teniendo el mismo problema.

La lista de dispositivos emparejados es grande y luego oculta un botón de búsqueda que se encuentra en la parte inferior de la lista.

Mi código xml es muy similar al ejemplo:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/listpaired_devices" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/title_paired_devices" android:visibility="gone" android:background="#666" android:textColor="#fff" android:paddingLeft="5dp" /> <ListView android:id="@+id/paired_devices" android:layout_width="fill_parent" android:layout_height="wrap_content" android:stackFromBottom="true" android:layout_weight="1" /> <TextView android:id="@+id/list_new_devices" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/title_other_devices" android:visibility="gone" /> <ListView android:id="@+id/new_devices" android:layout_width="fill_parent" android:layout_height="wrap_content" android:stackFromBottom="true" android:layout_weight="2" /> <Button android:id="@+id/btscan" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/btscan" /> </LinearLayout> 

Pero no puedo mostrar el botón de búsqueda en la parte inferior. Aquí mi pantalla: Mi pantalla

Podrías ver un poco del botón en la parte inferior de la ventana de diálogo.

¿Es posible limitar el número de filas mostradas en el listview? ¿Puede alguien decirme cómo puedo solucionar este problema

En primer lugar algunos puntos sobre su código:

  • layout_weight sólo tiene sentido si un objeto no tiene tamaño en una determinada dimensión, es decir, se establece layout_height o layout_width en 0, por lo que esto no tiene ningún efecto en el código.
  • Establecer la altura de un ListView a wrap_content es bastante sin sentido, e incluso si funciona es mala práctica. Utilice 'fill_parent' o una altura definida.
  • El botón está oculto porque, según el punto anterior, los ListView que ha creado no tienen un tamaño predefinido, así que ocupe el mayor espacio posible, presionando el botón de la pantalla.

Así que vamos a pensar en lo que realmente tienes allí – es sólo una lista con un botón en la parte inferior (sí, puede tener encabezados o múltiples fuentes de datos, pero vamos a llegar a eso).

La siguiente disposición le dará un ListView en la parte superior y un botón en la parte inferior. El ListView ocupará cualquier espacio que no utilice el botón. Observe cómo se define el botón antes de ListView en el diseño. Esto hace que Android calcule cuánta altura ocupa el botón antes de considerar el ListView. A continuación, da el ListView el resto de la altura disponible.

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/btscan" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="@string/btscan" /> <ListView android:id="@+id/all_devices" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_above="@id/btscan" android:stackFromBottom="true" /> </RelativeLayout> 

Así que ese es el diseño. Ahora vamos a considerar el contenido real de su lista: tiene un encabezado, seguido por una lista de dispositivos emparejados, seguido por otro encabezado y luego una lista de nuevos dispositivos.

Usted puede crear esto usando un solo adaptador – Commonsware proporciona una muy buena aplicación llamada MergeAdapter pero usted podría codificar sus los propios. MergeAdapter no le permite ver directamente (por ejemplo, para los encabezados), pero afortunadamente Commonsware también proporciona el SackOfViewsAdapter que le permite agregar vistas a él, y luego puede agregar el SackOfViewsAdapter a MergeAdapter.

Aquí hay un pseudo-código que debe lograr lo que se describe anteriormente.

 // This is the adapter we will use for our list with ListView.setAdapter MergeAdapter listAdapter = new MergeAdapter(); // The first header - you'll need to inflate the actual View (myHeaderView1) from some resource // using LayoutInflater List<View> firstHeaderViews = new List<View(); firstHeaderViews.add(myHeaderView1); SackOfViewsAdapter firstHeaderAdapter = new SackOfViewsAdapter(firstHeaderViews) // Second header List<View> secondHeaderViews = new List<View(); secondHeaderViews.add(myHeaderView2); SackOfViewsAdapter secondHeaderAdapter = new SackOfViewsAdapter(secondHeaderViews); // Now to add everything to the MergeAdapter // First goes the first header listAdapter.addAdapter(firstHeaderAdapter); // Now your first list listAdapter.addAdapter(firstListAdapter); // Now your second header listAdapter.addAdapter(secondHeaderAdapter); // Now your second list listAdapter.addAdapter(secondListAdapter); // Now set the adapter to the list myList.setAdapter(listAdapter) 

El diseño producido debe ser algo como esto . Nota He extendido la lista para mostrar cómo se comporta con una lista más larga que la pantalla; el botón sigue siendo visible. El cuadro rojo marca los límites de la pantalla.

Puede limitar el número de filas que se muestran en la vista de lista, pero no está seguro si eso le ayudará realmente en lo que desea lograr, porque está ocultando información del usuario que podría ser importante para él. Puede limitar el número de filas limitando el número de elementos que pasa al adaptador listview, o puede establecer la visibilidad a 'ido' en el método getView cuando la vista de lista alcanza una determinada posición (puede comprobar la 'posición' parámetro de getView ()).

Sin embargo, le sugeriría que use sólo una vista de lista (agregue un separador para el título 'nuevo / otros dispositivos' en la vista de un elemento de lista, pero ocúltelo de forma predeterminada y, como ya sugirió suri, utilice encabezados y footers para el listview (para colocar el botón de exploración).

  • Seleccione sólo un botón de radio a la vez en la vista de lista personalizada, android
  • Android addHeaderView desaparece cuando no hay elementos en ListView
  • ¿Cómo funciona getItem () en un arrayAdapter?
  • OnItemClickListener y OnClickListener en ListView
  • ¿Cómo notificar a DataSetChange () del método onitemclick ()?
  • Ancho y color del borde del elemento ListView de Android
  • Crear ListView programaticamente
  • Quitar sombra de arriba y abajo de ListView en android?
  • Posición de retención en ListView después de llamar a notifyDataSetChanged
  • ListView inside SwipeRefreshLayout inside Gaveta (Layout): no bloquea la dirección de desplazamiento
  • Cómo obtener el valor de un elemento Listview que se hace clic en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.