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="&lt;&lt; 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.

 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.

  1. Utilizar RelativeLayout

  2. Añade tu lista vacía

  3. Añádase listView (emptyList debe estar justo detrás del listview)

  4. 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="&lt;&lt; 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(); 
  • Cambiar la lista seleccionada ver ítem problema de la imagen en android
  • Encuadernación onScrolling escucha al android ListView
  • SetEmptyView en ListView no mostrar su vista en una aplicación para Android
  • Android Colores alternativos en ListView
  • Cómo establecer el ancho de la ListView en un PopupWindow en Android?
  • La lista muestra el color negro
  • android usando setlistadapter () sin extender listactivity
  • Problemas con el widget android-pulltorefresh
  • Agregar un elemento CheckBox a ListView impide que pueda recibir ItemClick
  • Centralización de diseño de Android en RelativeLayout para ListView personalizado
  • OpenGLRenderer, se encontró el glifo no válido
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.