setEmptyView en ListView no funciona
Estoy intentando fijar la visión vacía cuando el listView está vacío. Este es mi diseño XML completo:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/fondgris" android:orientation="vertical" > <!-- Header Starts --> <RelativeLayout android:id="@+id/head" android:layout_width="fill_parent" android:layout_height="35sp" android:background="@layout/header_gradient" android:paddingBottom="5dip" android:paddingTop="5dip" > <TextView android:id="@+id/activity" android:layout_width="wrap_content" android:layout_height="35dp" android:layout_alignParentLeft="true" android:layout_centerInParent="true" android:layout_marginLeft="5dp" android:gravity="center_vertical" android:scaleType="center" android:text="List of projects" android:textColor="#ffffff" android:textSize="13sp" android:textStyle="bold" android:tint="#0E5EC7" /> <ImageButton android:id="@+id/logout" android:layout_width="30dp" android:layout_height="35dp " android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="0dp" android:background="@android:color/transparent" android:onClick="logout" android:scaleType="center" android:src="@drawable/sortie" android:tint="#FFFFFF" > </ImageButton> <ImageButton android:id="@+id/home" android:layout_width="35dp" android:layout_height="35dp " android:layout_centerVertical="true" android:layout_toLeftOf="@id/logout" android:background="@android:color/transparent" android:onClick="home" android:scaleType="center" android:src="@drawable/home" > </ImageButton> <ImageButton android:id="@+id/back" android:layout_width="wrap_content" android:layout_height="35dp " android:layout_centerVertical="true" android:layout_toLeftOf="@id/home" android:background="@android:color/transparent" android:onClick="back" android:scaleType="center" android:src="@drawable/back" android:tint="#FFFFFF" > </ImageButton> </RelativeLayout> <!-- Editext and ImageView for Search --> <RelativeLayout android:id="@+id/linearLayout2" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/inputSearch" android:layout_width="150dp" android:layout_height="35dp" android:layout_centerVertical="true" android:layout_toLeftOf="@+id/bnSearch" android:hint="Search..." android:inputType="textVisiblePassword" android:textSize="12sp" /> <ImageButton android:id="@+id/bnSearch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/inputSearch" android:layout_centerInParent="true" android:layout_toLeftOf="@+id/bnClear" android:background="@android:color/transparent" android:src="@drawable/search" /> <ImageButton android:id="@+id/bnClear" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/inputSearch" android:layout_centerInParent="true" android:layout_marginRight="3dip" android:background="@android:color/transparent" android:onClick="ClearSearch" android:src="@drawable/cancel" /> <Button android:id="@+id/imageButtonAddProject" android:layout_width="wrap_content" android:layout_height="35dp" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_centerInParent="true" android:drawableLeft="@drawable/add" android:onClick="addProject" android:text=" Add Project" android:textColor="@color/text_color" android:textSize="12sp" /> </RelativeLayout> <!-- List View --> <ListView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="337dp" android:layout_weight="0.74" > </ListView> <TextView android:id="@+id/emptyList" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:text="Liste vide " android:textSize="12sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0.04" android:orientation="horizontal" > <Button android:id="@+id/bnPrevious" android:layout_width="80dp" android:layout_height="35dp" android:layout_marginLeft="30dp" android:background="@android:color/transparent" android:text="<< Prev" android:textSize="12sp" /> <TextView android:id="@+id/page" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Page" android:textSize="12sp" /> <EditText android:id="@+id/editpage" android:layout_width="wrap_content" android:layout_height="35dp" android:textSize="12sp" /> <TextView android:id="@+id/of" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="of " android:textSize="12sp" /> <TextView android:id="@+id/nbpage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12sp" /> <Button android:id="@+id/bnNext" android:layout_width="80dp" android:layout_height="35dp" android:layout_marginRight="30dp" android:background="@android:color/transparent" android:text="Next >>" android:textSize="12sp" /> </LinearLayout> </LinearLayout>
No tiene efecto, hice la depuración y entrar en si parte pero sin establecer la lista de vacío, la lista seguirá apareciendo! No puedo entender por qué, agradezco su ayuda.
- ¿Cómo funciona getItem () en un arrayAdapter?
- Error al mostrar datos como ListView de Firebase
- Listview, abra una nueva actividad onClick
- Agregar encabezados en una listaVer utilizando ArrayAdapter
- Carpeta Java de Java FALLA LA TRANSACCIÓN DE LA CARPETA
final ProjectContainer container = gson.fromJson(resultat, ProjectContainer.class); final ListView lv = (ListView) findViewById(R.id.list); TextView emptyList = (TextView) findViewById(R.id.emptyList); // if list empty if (container == null) { lv.setEmptyView(emptyList); emptyList.setText("No Projects Found"); }
Gracias por adelantado.
- Cómo expandir una fila de la lista cuando la toquemos en listview
- Implementación de Galería vertical con ListViews
- Uso del selector de un diseño para cambiar las propiedades de su hijo
- Cómo puede mostrar un AdView en cada n-ésima posición en un listView
- Implementación de 47degree android-swipelistview para desplazar android ListViewItem
- Llamar al método setEmpty de ListView no funciona (no se muestra nada cuando la lista está vacía)
- ANDROID: Agregar espacio vacío al final de ListView
- Error: java.lang.IndexOutOfBoundsException: Índice 2 no válido, tamaño es 2
-
Utilizar RelativeLayout
-
Añade tu lista vacía
-
Añádase listView (emptyList debe estar justo detrás del listview)
-
Si consiguió 0 artículos de json, defina la visibilidad de listView a View.INVISIBLE.
Editar:
Ok, usted necesita cambiar su XML un poco.
incluya emptyList y liste dentro de un RelativeLayout como sigue.
<RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" > <TextView android:id="@+id/emptyList" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="There is no item" android:textSize="25sp" /> <ListView android:id="@+id/list" android:background="@android:color/white" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView> </RelativeLayout>
Para mostrar texto vacío, establezca visibilidad listView en GONE. Aquí está la salida de la muestra en mi lado. Primero con la visibilidad de listView Visible y la segunda con la visibilidad de listview GONE
Aquí si su código xml completo actualizado.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/fondgris" android:orientation="vertical" > <!-- Header Starts --> <RelativeLayout android:id="@+id/head" android:layout_width="fill_parent" android:layout_height="35sp" android:background="@layout/header_gradient" android:paddingBottom="5dip" android:paddingTop="5dip" > <TextView android:id="@+id/activity" android:layout_width="wrap_content" android:layout_height="35dp" android:layout_alignParentLeft="true" android:layout_centerInParent="true" android:layout_marginLeft="5dp" android:gravity="center_vertical" android:scaleType="center" android:text="List of projects" android:textColor="#ffffff" android:textSize="13sp" android:textStyle="bold" android:tint="#0E5EC7" /> <ImageButton android:id="@+id/logout" android:layout_width="30dp" android:layout_height="35dp " android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="0dp" android:background="@android:color/transparent" android:onClick="logout" android:scaleType="center" android:src="@drawable/sortie" android:tint="#FFFFFF" > </ImageButton> <ImageButton android:id="@+id/home" android:layout_width="35dp" android:layout_height="35dp " android:layout_centerVertical="true" android:layout_toLeftOf="@id/logout" android:background="@android:color/transparent" android:onClick="home" android:scaleType="center" android:src="@drawable/home" > </ImageButton> <ImageButton android:id="@+id/back" android:layout_width="wrap_content" android:layout_height="35dp " android:layout_centerVertical="true" android:layout_toLeftOf="@id/home" android:background="@android:color/transparent" android:onClick="back" android:scaleType="center" android:src="@drawable/back" android:tint="#FFFFFF" > </ImageButton> </RelativeLayout> <!-- Editext and ImageView for Search --> <RelativeLayout android:id="@+id/linearLayout2" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/inputSearch" android:layout_width="150dp" android:layout_height="35dp" android:layout_centerVertical="true" android:layout_toLeftOf="@+id/bnSearch" android:hint="Search..." android:inputType="textVisiblePassword" android:textSize="12sp" /> <ImageButton android:id="@+id/bnSearch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/inputSearch" android:layout_centerInParent="true" android:layout_toLeftOf="@+id/bnClear" android:background="@android:color/transparent" android:src="@drawable/search" /> <ImageButton android:id="@+id/bnClear" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/inputSearch" android:layout_centerInParent="true" android:layout_marginRight="3dip" android:background="@android:color/transparent" android:onClick="ClearSearch" android:src="@drawable/cancel" /> <Button android:id="@+id/imageButtonAddProject" android:layout_width="wrap_content" android:layout_height="35dp" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_centerInParent="true" android:drawableLeft="@drawable/add" android:onClick="addProject" android:text=" Add Project" android:textColor="@color/text_color" android:textSize="12sp" /> </RelativeLayout> <!-- List View --> <RelativeLayout android:layout_width="match_parent" android:layout_height="337dp" android:layout_gravity="center" android:layout_weight="0.74" > <TextView android:id="@+id/emptyList" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="There is no item" android:textSize="25sp" /> <ListView android:id="@+id/list" android:background="@android:color/white" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView> </RelativeLayout> <!-- end of listview --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0.04" android:orientation="horizontal" > <Button android:id="@+id/bnPrevious" android:layout_width="80dp" android:layout_height="35dp" android:layout_marginLeft="30dp" android:background="@android:color/transparent" android:text="<< Prev" android:textSize="12sp" /> <TextView android:id="@+id/page" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Page" android:textSize="12sp" /> <EditText android:id="@+id/editpage" android:layout_width="wrap_content" android:layout_height="35dp" android:textSize="12sp" /> <TextView android:id="@+id/of" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="of " android:textSize="12sp" /> <TextView android:id="@+id/nbpage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12sp" /> <Button android:id="@+id/bnNext" android:layout_width="80dp" android:layout_height="35dp" android:layout_marginRight="30dp" android:background="@android:color/transparent" android:text="Next >>" android:textSize="12sp" /> </LinearLayout> </LinearLayout>
Y en código.
if (container == null) { lv.setVisibility(View.INVISIBLE); }
Espero que sea útil.
Debajo de un fragmento con un ejemplo
TextView emptyList = new TextView(getContext()); emptyList.setText("The list is empty"); ListView mListView = (ListView) findViewById(R.id.list_view); ((ViewGroup)mListView.getParent()).addView(emptyList); mListView.setEmptyView(emptyList); mListView.setAdapter(adapter);
No tiene que hacer una comprobación nula antes de establecer la vista vacía. Simplemente configure la vista vacía en ListView. La vista de lista se encargará de mostrar la vista vacía cuando se pasa el adaptador con contenido cero.
lv.setEmptyView(emptyList); emptyList.setText("No Projects Found");
¿Estás llamando a setEmptyView(View)
antes de setAdapter(ListAdapter)
?
Creo que el orden de estas operaciones es importante ( setEmptyView
debe ser llamado primero), y que un adaptador debe ser establecido para la vista vacía que se mostrará.
Llamar a setEmptyView no hará la lista vacía. Establece una vista que mostrará el ListView si el adaptador está vacío. Por lo tanto, después de setEmptyView debe establecer el adaptador que no tiene ningún elemento en él.
Cuando usted tiene un diseño que tiene un ListView y debajo de él un RelativeLayout con GraphicsButtons para los iconos como el borrado etc, entonces el método que utilizo para obtener el ListView para ocupar todo menos el fondo bit de la pantalla es (como me enteré de este sitio) para tener su altura fijada en 0px y un peso de 1 más dejando el otro Views / RelativeLayouts sin pesos. Todo bien y bien hasta que muestre un ListView vacío después de lo cual no aparece de nuevo porque aunque tiene elementos en él más adelante, su altura se estableció en su primera aparición.
Muestro el pedacito del código (ningún Layouts incluido) que utilizo para conseguir la cosa sangrienta que trabaja …
public void listFiles() { boolean mEmptyList; mFileNames = mFile.list(); mFileCount = (mFileNames == null) ? 0 : mFileNames.length; mEmptyList = (mFileCount == 0); mFileChecked = mEmptyList ? null : new boolean[mFileCount]; View mEmpty; if ((mEmpty = mListView.getEmptyView()) != null) { if (mEmpty.getVisibility() != ( mEmptyList ? View.VISIBLE : View.GONE )) { mEmpty.setVisibility( mEmptyList ? View.VISIBLE : View.GONE ); if (mFileCount > 0) mListView.setMinimumHeight(((ViewGroup) mListView.getParent()).getHeight()); mListView.setVisibility( mEmptyList ? View.GONE : View.VISIBLE ); } } }
Si esto no está en el constructor del adaptador, entonces uno tiene que llamar
mListView.invalidateViews();
- La firma de .apk falla incluso con Sun JDK (java.lang.NoClassDefFoundError: com.android.jarutils.DebugKeyProvider)
- Socket no lanza una excepción aunque no puede conectarse