2010-09-16 14 views
13

Tengo una actividad que contiene un ListView definido en XML (no subclasifica la clase ListActivity).No funciona el método setEmpty de ListView (no se muestra nada cuando la lista está vacía)

Quiero mostrar un mensaje cuando el ListView está vacía, así que traté de hacerlo con el método setEmptyView:

listView = (ListView) findViewById(R.id.list); 
TextView emptyListText = new TextView(this); 
// also tried with the following line uncommented 
// emptyListText.setId(android.R.id.empty); 
emptyListText.setText(getString(R.string.EmptyList)); 
listView.setEmptyView(emptyListText); 

Pero no está funcionando.

¿Alguna idea?

Gracias.

Respuesta

0

Hmm, quizás la razón es que la vista no tiene configurados los parámetros de diseño. Intenta establecer algunos parámetros de diseño para esa vista, y creo que eso funcionará. Algo como esto:

emptyListText.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 

Si esto no funciona, trate de inflar el punto de vista de los padres de su ListView (R.id.list), con algo como esto:

mEmptyListView = (LinearLayout) getLayoutInflater().inflate(
       R.layout.no_items, 
       (LinearLayout) findViewById(R.id.list)); 
mListView.setEmptyView(findViewById(R.id.no_items)); 

estoy escribiéndolo desde la memoria, así que avíseme si no funciona o si hay algún error tipográfico. Básicamente, la idea es que su punto de vista, debe añadirse a la disposición

Ger

+0

Gracias por su sugerencia, pero su aún no funciona. – MyNameIsZero

+0

Ok, edité mi respuesta. Avíseme si esto funciona para usted ... – ggomeze

23

Es necesario añadir las dos líneas siguientes a su código después de llamar setText():

emptyListText.setVisibility(View.GONE); 
((ViewGroup)listView.getParent()).addView(emptyListText); 

Si la visibilidad no es establecido en GONE (oculto), entonces TextView siempre se volverá visible. La segunda línea coloca el TextView en el ViewView de ListView, que se maneja automáticamente cuando se usan vistas XML declarativas.


Fuente: http://www.littlefluffytoys.com/?p=74

+0

@MyNameIsZero: ¿Le ayudaron nuestras respuestas o todavía tiene problemas? – McStretch

+5

Gracias, colocando la vista en el mismo ViewGroup ayudado. GONE se establece automáticamente con setEmptyView, por lo que no necesita llamar a setVisibility. –

+0

Gracias amigo, esta rocas –

2

Trate de esta manera ...

diseño Primero un simple activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context=".MainActivity" > 

    <ListView 
     android:id="@+id/root_list" 
     android:layout_width="match_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1" /> 

    <ViewStub 
     android:id="@+id/root_empty" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout="@layout/empty_view" 
     android:visibility="gone" /> 

</LinearLayout> 

y de su MainActivity.java:

public class MainActivity extends Activity { 
    ListView mListView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     this.mListView = (ListView) findViewById(R.id.root_list); 
     mListView.setEmptyView(findViewById(R.id.root_empty)); 

     mListView.setAdapter(null); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    }  
} 

Lo que se coloca en R.layout.empty_view aparecerá siempre que el adaptador sea nulo o isEmpty devuelva verdadero.

que utiliza esto para el empty_view.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/empty_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="center" 
     android:background="@color/gray" 
     android:gravity="center" 
     android:text="@string/list_empty" 
     android:textColor="@color/white" 
     android:textSize="24sp" /> 

</LinearLayout> 
Cuestiones relacionadas