Dans ce tuto je vais réaliser une listview avec des entêtes intercalées pour créer des catégories . L’affichage que je veux obtenir
La Technique que je vais utilisée ici c’est de créer ma propre class ListSeparer qui est une extension de la class BaseAdapter qui elle pourra contenir d’autre adapter .
Je créer deux attributs sections et headers, section tableau de string et header tableau de string et adapter.
Je reprogramme certaine méthode exemple getItem celle qui donne la position dans ma listview par rapport au sections ajoutées
D’abord mes fichiers xml.
Le fichier list_header.xml pour afficher les entetes
Le fichier list_item.xml pour des items simples
Le fichier list_complex.xml pour des items avec titres et sous titres
Ma class ListSeparer.
public class ListSeparer extends BaseAdapter {
public final Map sections = new LinkedHashMap();
public final ArrayAdapter headers;
public final static int TYPE_SECTION_HEADER = 0;
public ListSeparer(Context context) {
//pour les entetes j'utilise le fichier list_header.xml
headers = new ArrayAdapter(context, R.layout.list_header);
}
//méthode pour ajouter dans le header le nom de ma catégorie et dans sections le nom et un objet adapter
public void addSection(String section, Adapter adapter) {
this.headers.add(section);
this.sections.put(section, adapter);
}
//Renvoi la position d'un clique
public Object getItem(int position) {
for(Object section : this.sections.keySet()) {
Adapter adapter = sections.get(section);
int size = adapter.getCount() + 1;
// récupération de la position dans la section
if(position == 0) return section;
if(position < size) return adapter.getItem(position - 1);
// passe à la section suivant
position -= size;
}
return null;
}
// renvoi le nombre d'item
public int getCount() {
// total de l'ensemble des sections, plus une pour chaque tête de section
int total = 0;
for(Adapter adapter : this.sections.values())
total += adapter.getCount() + 1;
return total;
}
public int getViewTypeCount() {
int total = 1;
for(Adapter adapter : this.sections.values())
total += adapter.getViewTypeCount();
return total;
}
public int getItemViewType(int position) {
int type = 1;
for(Object section : this.sections.keySet()) {
Adapter adapter = sections.get(section);
int size = adapter.getCount() + 1;
// Récupération de la position dans la section
if(position == 0) return TYPE_SECTION_HEADER;
if(position < size) return type + adapter.getItemViewType(position - 1);
// passe a la section suivante moins un par l'entête
position -= size;
type += adapter.getViewTypeCount();
}
return -1;
}
public boolean areAllItemsSelectable() {
return false;
}
public boolean isEnabled(int position) {
return (getItemViewType(position) != TYPE_SECTION_HEADER);
}
public View getView(int position, View convertView, ViewGroup parent) {
int sectionnum = 0;
for(Object section : this.sections.keySet()) {
Adapter adapter = sections.get(section);
int size = adapter.getCount() + 1;
// Récupération de la position dans la section
if(position == 0) return headers.getView(sectionnum, convertView, parent);
if(position < size) return adapter.getView(position - 1, convertView, parent);
// otherwise jump into next section
position -= size;
sectionnum++;
}
return null;
}
public long getItemId(int position) {
return position;
}
}
Exemple d'utilisation de ma classe dans une application.
public class ListeCourse extends Activity{
public final static String ITEM_TITLE = "title";
public final static String ITEM_CAPTION = "caption";
LecteurFlux objLectFlux = new LecteurFlux();
public Map createItem(String title, String caption) {
Map item = new HashMap();
item.put(ITEM_TITLE, title);
item.put(ITEM_CAPTION, caption);
return item;
}
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
List
Il est temps de mettre à profit les tutoriels d'Android France:
Passez à la vitesse supérieure et investissez quelques dizaines d'euros pour acquérir les connaissances qui vous feront gagner de l'argent avec vos applications rendez-vous sur notre boutique Android-france pour ces formations en vidéo
Suite à vos mails j'ai créé deux nouvelles catégories pour accéder directement aux tuto.
- Developpez sous Android pour tous les tuto sur les étapes du développement du logiciel de gestion de recette
- Tuto développement les autres tuto de développement sur des thèmes précis