Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Mostrar la vista vacía cuando ListView está vacío

Por alguna razón, la vista vacía, un TextView en este caso, siempre aparece incluso cuando el ListView no está vacío. Pensé que el ListView detecta automáticamente cuándo mostrar la vista vacía.

<RelativeLayout android:id="@+id/LinearLayoutAR" android:layout_height="fill_parent" android:layout_width="fill_parent"> <ListView android:id="@+id/ARListView" android:layout_width="fill_parent" android:layout_height="fill_parent"></ListView> <ProgressBar android:id="@+id/arProgressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true"></ProgressBar> <!-- Here is the view to show if the list is emtpy --> <TextView android:id="@id/android:empty" android:layout_width="match_parent" android:layout_height="match_parent" android:text="No Results" /> </RelativeLayout> 

¿Cómo puedo conectar la vista vacía correctamente?

10 Solutions collect form web for “Mostrar la vista vacía cuando ListView está vacío”

Debería ser así:

 <TextView android:id="@android:id/empty" android:layout_width="match_parent" android:layout_height="match_parent" android:text="No Results" /> 

Tenga en cuenta el atributo id .

Cuando se extiende FragmentActivity o Activity y no ListActivity , querrá echar un vistazo a:

ListView.setEmptyView ()

Como dice appsthatmatter, en el diseño algo como:

 <ListView android:id="@+id/listView" ... /> <TextView android:id="@+id/emptyElement" ... /> 

Y en la Actividad enlazada:

 this.listView = (ListView) findViewById(R.id.listView); this.listView.setEmptyView(findViewById(R.id.emptyElement)); 

También funciona con un GridView …

He intentado todas las soluciones anteriores. He venido a resolver el problema. Aquí estoy publicando la solución completa.

El archivo xml :

 <RelativeLayout android:id="@+id/header_main_page_clist1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="20dp" android:paddingBottom="10dp" android:background="#ffffff" > <ListView android:id="@+id/lv_msglist" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="@color/divider_color" android:dividerHeight="1dp" /> <TextView android:id="@+id/emptyElement" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="NO MESSAGES AVAILABLE!" android:textColor="#525252" android:textSize="19.0sp" android:visibility="gone" /> </RelativeLayout> 

TextView ( "@ + id / emptyElement" ) es el marcador de posición para la lista vacía.

Aquí está el código para la página java:

 lvmessage=(ListView)findViewById(R.id.lv_msglist); lvmessage.setAdapter(adapter); lvmessage.setEmptyView(findViewById(R.id.emptyElement)); 

Recuerde colocar el emptyView después de vincular el adaptador a listview.Mine no estaba funcionando por primera vez y después de haber movido el setEmptyView después de que el setAdapter está funcionando.

Salida:

Introduzca aquí la descripción de la imagen

Te recomiendo que uses ViewStubs como este

 <FrameLayout android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" > <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <ViewStub android:id="@android:id/empty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout="@layout/empty" /> </FrameLayout> 

Vea el ejemplo completo de Cyril Mottier

 <ListView android:id="@+id/listView" ... /> <TextView android:id="@+id/empty" ... /> and in the linked Activity: this.listView = (ListView) findViewById(R.id.listView); this.listView.setEmptyView(findViewById(R.id.empty)); 

Esto funciona claramente con FragmentActivity si está utilizando la biblioteca de soporte. Probado esto construyendo para API 17 es decir 4.2.2 imagen.

Sólo para agregar que realmente no necesita crear nuevos ID, algo como lo siguiente funcionará.

En el diseño:

 <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@android:id/list"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@android:id/empty" android:text="Empty"/> 

Luego en la actividad:

  ListView listView = (ListView) findViewById(android.R.id.list); listView.setEmptyView(findViewById(android.R.id.empty)); 

Código de actividad, es importante extender ListActivity .

 package com.example.mylistactivity; import android.app.ListActivity; import android.os.Bundle; import android.widget.ArrayAdapter; import com.example.mylistactivity.R; // It's important to extend ListActivity rather than Activity public class MyListActivity extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mylist); // shows list view String[] values = new String[] { "foo", "bar" }; // shows empty view values = new String[] { }; setListAdapter(new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1, android.R.id.text1, values)); } } 

Layout xml, el id en ambas vistas es importante.

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <!-- the android:id is important --> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent"/> <!-- the android:id is important --> <TextView android:id="@android:id/empty" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="i am empty"/> </LinearLayout> 

Tuve este problema. Tuve que hacer que mi clase extienda ListActivity en vez de Actividad, y cambie el nombre de mi lista en el XML a android:id="@android:id/list"

Primero verifique que la lista contiene algunos valores:

 if (list.isEmpty()) { listview.setVisibility(View.GONE); } 

Si es entonces OK, de lo contrario use:

 else { listview.setVisibility(View.VISIBLE); } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.