2010-11-03 13 views
31

Ho un ListView che può avere 0 articoli personalizzati all'interno (come "I miei download").Android ListView: testo predefinito quando non ci sono articoli

Esiste comunque un testo predefinito "Nessun download"?

Grazie!

EDIT: ecco la mia soluzione,

TextView emptyView = new TextView(getApplicationContext()); 
emptyView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
emptyView.setTextColor(R.color.black); 
emptyView.setText(R.string.no_purchased_item); 
emptyView.setTextSize(20); 
emptyView.setVisibility(View.GONE); 
emptyView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL); 

((ViewGroup)getListView().getParent()).addView(emptyView); 
getListView().setEmptyView(emptyView); 

alt text

+0

Perché la proprietà View.GONE ambientazione? – medonja

+1

@medonja perché il metodo setEmptyView (emptyView) non funziona correttamente se non si aggiunge la vista vuota alla gerarchia della vista, ma in tal caso la vista vuota sarebbe sempre visibile. Quindi devi renderlo GONE e questo funziona bene poiché ciò che setEmptyView() fa è solo cambiando la visibilità di emptyView in base allo stato vuoto della lista. – tomalf2

risposta

36
public void setEmptyView (View emptyView) 

Since: API Level 1 
Sets the view to show if the adapter is empty 

Chiamato sull'istanza ListView.

E.g. mListView.setEmptyView (someView);

È possibile creare una vista al volo o gonfiarne una dall'xml.

1

C'è un altro approccio BaseAdapter ha metodo isEnabled(). Devi creare il tuo adattatore che restituirà per alcuni elementi isEnabled (int position) come false. In questo caso, quegli elementi non saranno selezionabili. È facile modificarlo in modo tale che quando l'elenco è vuoto basta aggiungere un elemento disabilitato.

Ma per il metodo sicuro sopra descritto da Alex Orlov è meglio

16

A meno che non ho letto male la tua domanda, si può anche solo specificare qualsiasi elemento vista con un ID di "@android: id/vuoto" nel layout e sarà curato automaticamente per te. Per esempio:

<ListView android:id="@android:id/list" android:layout_width="fill_parent" 
    android:layout_height="fill_parent" android:visibility="visible"/> 

<LinearLayout android:id="@android:id/empty" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:gravity="center"> 

    <TextView android:text="@string/no_messages" 
     android:layout_width="wrap_content" android:layout_height="wrap_content" 
     style="@style/textBoldLight"> 
    </TextView> 

</LinearLayout> 
+0

non ho pensato di dare l'id di vuoto al layout lineare al centro "nessun elemento trovato" buon pensiero. –

+6

Funzionerà solo con 'ListActivity'. Avrai bisogno di usare l'approccio di Alex per altre classi 'Activity'. –

0

Se stai usando Activity invece di ListActivity e si desidera impostare la gravità del vuoto al centro (sia in orizzontale che in verticale), è necessario utilizzare questi:

nel layout:

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

    <ListView 
     android:id="@+id/contacts" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

    <LinearLayout 
     android:id="@android:id/empty" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/no_contacts_add_one"> 
     </TextView> 

    </LinearLayout> 


</LinearLayout> 

Nella vostra attività:

ListView contacts = (ListView) view.findViewById(R.id.contacts); 
contacts.setEmptyView(view.findViewById(android.R.id.empty)); 
Problemi correlati