139 votes

Affichage vide lorsque ListView est vide

Pour une raison quelconque, la vue vide, un TextView dans ce cas, apparaît toujours même lorsque ListView n'est pas vide. Je pensais que ListView détecterait automatiquement quand afficher la vue vide.

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

Comment puis-je raccorder correctement la vue vide?

188voto

jjoe64 Points 3260

Lorsque vous prolongez FragmentActivity ou Activity et non ListActivity, vous voudrez,

jeter un coup d'œil à.

ListView.setEmptyView ()

136voto

schwiz Points 13679

CA devrait etre:

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

Notez l'attribut id .

119voto

Eddy Points 701

Comme le dit jjoe64, dans la mise en page quelque chose comme:

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

et dans l'activité liée:

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

Fonctionne également avec un GridView ...

16voto

LOG_TAG Points 4506

Je vous recommande fortement d'utiliser ViewStubs comme ceci

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

Voir l'exemple complet de Cyril Mottier

8voto

Yaojin Points 131
 <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));
 

Cela fonctionne clairement avec FragmentActivity si vous utilisez la bibliothèque de support. Testé cela en construisant pour API 17 ie 4.2.2 image.

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