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.
Comment puis-je raccorder correctement la vue vide?
Ça devrait être comme ça:
Notez l’atsortingbut id .
Lorsque vous prolongez FragmentActivity
ou Activity
et non ListActivity
, vous voudrez jeter un coup d’œil à:
ListView.setEmptyView ()
Comme l’appsthatmatter le dit, dans la mise en page quelque chose comme:
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 …
J’ai essayé toutes les solutions ci-dessus.Je suis venu à résoudre le problème.Ici je poste la solution complète.
Le fichier xml :
Le textView ( “@ + id / emptyElement” ) est l’espace réservé pour la liste vide.
Voici le code de la page java:
lvmessage=(ListView)findViewById(R.id.lv_msglist); lvmessage.setAdapter(adapter); lvmessage.setEmptyView(findViewById(R.id.emptyElement));
N’oubliez pas de placer la propriété emptyView après avoir lié l’adaptateur à listview.Mine ne fonctionnait pas pour la première fois et après avoir déplacé setEmptyView après le setAdapter, il fonctionne maintenant.
Sortie:
Je vous recommande fortement d’utiliser ViewStubs comme ceci
Voir l’exemple complet de Cyril Mottier
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.
Code d’activité, il est important d’étendre ListActivity
.
package com.example.mylistactivity; import android.app.ListActivity; import android.os.Bundle; import android.widget.ArrayAdapter; import com.example.mylistactivity.R; // It's important to extend ListActivity rather than Activity public class MyListActivity extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mylist); // shows list view Ssortingng[] values = new Ssortingng[] { "foo", "bar" }; // shows empty view values = new Ssortingng[] { }; setListAdapter(new ArrayAdapter( this, android.R.layout.simple_list_item_1, android.R.id.text1, values)); } }
Layout xml, l’id dans les deux vues est important.
Juste pour append que vous n’avez pas vraiment besoin de créer de nouveaux identifiants, quelque chose comme ce qui suit fonctionnera.
Dans la mise en page:
Puis dans l’activité:
ListView listView = (ListView) findViewById(android.R.id.list); listView.setEmptyView(findViewById(android.R.id.empty));
J’ai eu ce problème. J’ai dû faire en sorte que ma classe étende ListActivity plutôt que Activity et que je renomme ma liste XML en android:id="@android:id/list"
Tout d’abord, vérifiez que la liste contient des valeurs:
if (list.isEmpty()) { listview.setVisibility(View.GONE); }
Si c’est alors OK, sinon utilisez:
else { listview.setVisibility(View.VISIBLE); }