2010-09-16 12 views
13

Ho un'attività che contiene un oggetto ListView definito in XML (non sottoclasse la classe ListActivity).Chiamata al metodo ListEmpostaggio non funzionante (non viene visualizzato nulla quando l'elenco è vuoto)

voglio visualizzare un messaggio quando ListView è vuoto, così ho provato a fare così con il metodo 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); 

Ma non funziona.

Qualche idea?

Grazie.

risposta

0

Hmm, forse il motivo è che la vista non ha i parametri di layout impostati. Prova a impostare alcuni parametri di layout per quella vista, e penso che funzionerà. Qualcosa di simile a questo:

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

Se questo non funziona, provare a gonfiare la vista nel genitore del vostro ListView (R.id.list), con qualcosa di simile:

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

Sono scrivendolo dalla memoria, quindi fammi sapere se non funziona o c'è qualche errore di battitura. In sostanza l'idea è che la visualizzazione deve essere aggiunto al layout

Ger

+0

Grazie per il suggerimento, ma la sua non è ancora funzionante. – MyNameIsZero

+0

Ok, ho modificato la mia risposta. Fatemi sapere se questo funziona per voi ... – ggomeze

23

È necessario aggiungere le seguenti due righe al codice dopo che si chiama setText():

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

Se la visibilità non è impostato su GONE (nascosto), quindi TextView sarà sempre reso visibile. La seconda riga posiziona TextView nel ViewGroup di ListView, che viene gestito automaticamente quando si utilizzano le viste XML dichiarative.


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

+0

@ MyNameIsZero: le nostre risposte hanno aiutato o avete ancora problemi? – McStretch

+5

Grazie, ponendo la vista allo stesso ViewGroup aiutato. GONE viene impostato automaticamente con setEmptyView, quindi non è necessario chiamare setVisibility. –

+0

Grazie amico, questo scodella –

2

Prova in questo modo ...

Nuovo Primo un semplice 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> 

e verso il 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; 
    }  
} 

Qualsiasi cosa venga inserita in R.layout.empty_view verrà visualizzata ogni volta che l'adattatore è nullo o isEmpty restituisce true.

ho usato questo per l'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> 
Problemi correlati