/ / Android listviews: vues d'en-tête et de pied de page - java, android, listview, adaptateur

android listviews: vues d'en-tête et de pied de page - java, android, listview, adaptateur

Dans ma ListActivity, j'ai besoin de l'en-tête et du pied de pagevues (en haut et en bas de la liste) à utiliser comme boutons de page précédente et de page suivante de ma liste, respectivement, car je ne souhaite afficher que 20 éléments à la fois.

Je règle mes vues d'en-tête et de pied en faisant:

getListView().addHeaderView(myHeaderView);
getListView().addFooterView(myFooterView);
setListAdapter(adapter);

Cela fonctionne bien, mais je dois supprimer et ajouter dynamiquement ces vues d'en-tête et de pied de page, car certaines pages de ma liste peuvent ne pas comporter de bouton de page suivante ou de page précédente.

Le problème est que je ne peux pas appeler addHeaderView ni addFooterView après avoir appelé setListAdapter.

Y a-t-il un moyen de contourner ceci?

Réponses:

10 pour la réponse № 1

Pourquoi ne pas simplement réduire l'en-tête et le pied de page à une hauteur nulle ou griser les boutons (encore mieux).

Et la meilleure expérience utilisateur, à mon avis, consisterait à charger dynamiquement plus d’éléments, le cas échéant (par exemple lors du défilement), comme le fait l’application Gmail intégrée.


3 pour la réponse № 2

Oui, c'est un bug ou un oubli dans le ListView composant. Vous pouvez contourner ce problème en écrivant votre propre WrapperListAdapter qui gère l’ajout et la suppression d’éléments de liste fixes, mais je peux vous dire que ce n’est pas tout à fait simple à faire.

Sinon, et beaucoup plus facilement, vous pouvez ajouter un composant fixe au-dessus ou au-dessous du ListView où vous placez les boutons suivant et précédent.


2 pour la réponse № 3

Pourquoi ne pas réinitialiser l’adaptateur chaque fois que vous devez ajouter une vue d’en-tête, comme ceci:

ListView.FixedViewInfo headerInfo = getListView().new FixedViewInfo();
headerInfo.isSelectable=false ;
headerInfo.view = feedInfoView;
headerInfos.add(headerInfo);
headerViewListAdapter = new HeaderViewListAdapter(headerInfos,null,adapter);
getListView().setAdapter(headerViewListAdapter);