web-dev-qa-db-fra.com

Impossible d'ajouter une vue d'en-tête à la liste - setAdapter a déjà été appelé

J'ai un champ edittext et un bouton "recherche". Lorsque je clique sur Rechercher, je dois afficher une liste avec les données correspondant aux valeurs saisies dans l'edittext. J'ai ajouté un en-tête à ma liste en utilisant addHeader (). Lorsque je recherche pour la première fois, je peux afficher les données dans la liste avec succès. Mais lorsque je cherche à nouveau, je reçois l'erreur ci-dessous.

FATAL EXCEPTION: main
Java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called.
at Android.widget.ListView.addHeaderView(ListView.Java:261)
at Android.widget.ListView.addHeaderView(ListView.Java:284)

J'ai attribué un en-tête à ma liste avant de configurer l'adaptateur.

Ci-dessous mon code:

myList = (ListView) findViewById(R.id.searchResultsList);
View header = View.inflate(this, R.layout.search_results_header, null);
myList.addHeaderView(header, null, false);

dataAdapter = new MyCustomAdapter(this, R.layout.results_list_item, searchedResults);
myList.setAdapter(dataAdapter);

Où je me trompe?

20
user2740599

Sur Android 2.3, ajouter un en-tête après setAdapter (même si vous avez ajouté tôt, puis supprimé) lève une exception. Pour masquer ou afficher un en-tête de manière dynamique, utilisez setVisibility (). Comment? Vous pouvez voir Masquer les vues d'en-tête

25
ishitcno1

Impossible d'ajouter une vue d'en-tête à la liste - setAdapter a déjà été appelé . Comme vous pouvez le voir, myList.addHeaderView (en-tête) doit être exécuté avant

12
user2919006

J'ai eu le même problème aujourd'hui. J'ai plusieurs ListViews .. Avec les informations du premier, cela construit la liste du suivant et tout le monde y a setAdapter ..

setListAdapter(null);

au-dessus de la fonction, où je gonfle l'en-tête. J'espère que ça aide..

1
3k1

Essaye ça..

dataAdapter = new MyCustomAdapter(this, R.layout.results_list_item, searchedResults);
myList.addHeaderView(header);
myList.setAdapter(dataAdapter);
dataAdapter.notifyDataSetChanged();
1
Hariharan

Si vous avez utilisé Android:entries dans ListView dans un fichier xml, sa méthode est appelée setAdapter() avant addHeaderView. Supprimez donc Android:entriesattribute de ListView dans le fichier de présentation XML. Ce sera un travail.

1
AvisSiva

vous pouvez ajouter FrameLayout en tant qu'en-tête avant de configurer l'adaptateur et ajouter/supprimer dynamiquement une vue dans FrameLaypout

1
Dmitry

Après je mis

final ViewGroup header = (ViewGroup) inflater.inflate(R.layout.item, listView, false);
listView.addHeaderView(header, null, true); 

avant

listView.setAdapter(adapter);

un problème est toujours apparu. Ensuite, j'ai créé Build> Clean Project.

0
CoolMind
0
Manmohan Soni