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 № 1Pourquoi 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);