Comment ajouter plusieurs vues d'en-tête dans une ListView
J'ai un adaptateur personnalisé pour mon ListView
je veux ajouter des noms de projet comme les en-têtes de mes demandes de travail. L'ajout d'un en-tête unique fonctionne très bien mais je ne suis pas sûr de la façon d'ajouter des en-têtes multiples à l'aide de addHeaderView
. Je ne comprends pas d'où exactement à l'endroit setAdapter
ou est-ce que ça doit être placé à plusieurs reprises?
C'est mon code java pour une seule tête qui fonctionne:
mListView = (ListView)findViewById(R.id.dashboardList);
View header1 = getLayoutInflater().inflate(R.layout.listview_header, null, false);
tv = (TextView) header1.findViewById(R.id.listHeader);
adapter = new MyCustomAdapter(MyDashboardActivity.this, R.layout.mydashboard_row, dashboardBean);
tv.setText("Project 1");
mListView.addHeaderView(header1, null, false);
for (int i=0; i < 7; i++) {
dashboardBean.add(new DashboardBean(workRequests[i],status[i],actualHours[i]));
}
mListView.setAdapter(adapter);
Maintenant, je pour deux en-têtes, j'ai essayé ceci:
mListView = (ListView)findViewById(R.id.dashboardList);
View header1 = getLayoutInflater().inflate(R.layout.listview_header, null, false);
tv = (TextView) header1.findViewById(R.id.listHeader);
adapter = new MyCustomAdapter(MyDashboardActivity.this, R.layout.mydashboard_row, dashboardBean);
tv.setText("RxOffice");
mListView.addHeaderView(header1, null, false);
for (int i=0; i < 4; i++) {
dashboardBean.add(new DashboardBean(workRequests[i],status[i],actualHours[i]));
}
tv.setText(Project 2");
mListView.addHeaderView(header1, null, false);
for (int i=4; i < workRequests.length; i++) {
dashboardBean.add(new DashboardBean(workRequests[i],status[i],actualHours[i]));
}
mListView.setAdapter(adapter);
Mais cela ne fonctionne pas! Il me donne seulement le Projet 2 de l'en-tête et tous les 7 entrées-dessous. Quelqu'un pourrait-il me dire quel est le problème? Je suppose qu'il a quelque chose à voir avec setAdapter
. Merci!
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que ce que vous voulez faire est possible de la façon dont vous êtes en train de le faire. Lorsque vous utilisez
addHeaderView
il enveloppe votreListAdapter
dansHeaderViewListAdapter
. J'ai regardé les docs pour elle ici et qui semble impliquer que vous pourriez avoir plusieurs en-têtes, mais ils sont tous au top (duh, en-tête).Cela ressemble à ce que vous voulez vraiment est séparateurs...
Vous pouvez utiliser CommonWare de MergeAdapter. Il permet d'insérer les adaptateurs et les points de vue (dans l'ordre que vous le souhaitez) et de les présenter tous comme une seule carte pour une listview. Vous venez de la main il les en-têtes et des adaptateurs pour chaque section de contenu et puis le mettre sur votre liste.
Pseudo-code exemple:
J'ai réalisé plusieurs en-tête de scénario à l'aide personnalisée
Section Adapter
qui est à l'origine codé par CommonsWare, vous pouvez faire la section au sein de listivew, comme des Livres, des Jeux et etc. découvrez ci-dessous le code.Section De L'Adaptateur:
Au sein de l'Activité faire l'Article objet de la carte,découvrez ci-dessous le code:
section_header.xml
Au sein de l'Activité d'ajouter l'article, comme beaucoup que vous le souhaitez, comme ci-dessous:
Remarque: userPic & medPic sont le nom de la liste de tableaux.
MergeAdapter
. S'avère que je ne peux pas. MerciJe voudrais résoudre ce problème avec ExpandableListView. Il ne nécessite aucune bibliothèque.