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.
- Problema de visualización de desplazamiento rápido con ListAdapter y SectionIndexer
- Botón de Android en el elemento ListView para cambiar el texto en la misma fila
- Android ListView con Fragmento
- Cómo eliminar el color seleccionado en arrastrar sobre listview
- Lista de Android lista completa seleccionada seleccionada
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
- ¿Cómo obtengo el ID de fila de la fila de un ListView, que contiene un elemento que se puede hacer clic?
- Android ListView Deslizar hacia la derecha y hacia la izquierda para aceptar y rechazar
- setEmptyView en ListView no funciona
- Android: Búsqueda de la altura de renderizado de ListView
- SetEmptyView en ListView no mostrar su vista en una aplicación para Android
- Enumerar actividad con encabezado, pie de página y vacía todo visible
- Obtención de datos de lista de elementos de una lista
- Cómo crear listview con categorías / segmentos?
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 establecelayout_height
olayout_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).
- Android – Get Notified cuando se detecta un nuevo punto de acceso?
- Error al inflacionar la casilla de verificación