31 votes

ListView Android : texte par défaut lorsqu'il n'y a pas d'éléments

J'ai une ListView qui peuvent avoir 0 articles personnalisés à l'intérieur (comme "Mes téléchargements").

Est-il possible d'afficher un texte par défaut " Pas encore de téléchargement " ?

Merci !

EDIT : voici la solution que j'ai trouvée,

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

36voto

Alex Orlov Points 9229
public void setEmptyView (View emptyView)

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

Appelé sur votre instance de ListView.

Par exemple, mListView.setEmptyView(someView) ;

Vous pouvez construire une vue à la volée ou en créer une à partir d'un fichier xml.

16voto

Dustin Points 4694

Sauf si j'ai mal lu votre question, vous pouvez également spécifier n'importe quel élément de vue avec un ID de "@Android:id/empty" dans votre disposition et cela sera pris en charge automatiquement pour vous. Par exemple :

<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>

1voto

barmaley Points 7307

Il existe une autre approche : BaseAdapter possède la méthode isEnabled(). Vous devez créer votre propre adaptateur qui renverra la valeur false pour certains éléments isEnabled(int position). Dans ce cas, ces éléments ne seront pas sélectionnables. Il est facile de modifier cette méthode de manière à ce que, lorsque la liste est vide, il suffise d'ajouter un élément désactivé.

Mais il est certain que la méthode décrite ci-dessus par Alex Orlov est meilleure

0voto

Alireza Points 570

Si vous utilisez Activity au lieu de ListActivity et que vous souhaitez centrer la gravité du vide (à la fois horizontalement et verticalement), vous devez utiliser les éléments suivants :

Dans votre mise en page :

<?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> 

Dans votre activité :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X