Propriété de Albiri Sigue
customer 27921 at Fri Mar 11 19:19:45 +0100 2011
94 L’art du développement Android
Créer une liste...
Les listes avec de belles icônes sont jolies, mais ne pourrions-nous pas créer des widgets
ListView dont les lignes contiendraient des widgets fils interactifs, et non plus passifs
comme TextView et ImageView ? Pourrions-nous, par exemple, combiner une RatingBar
avec du texte afin de permettre à l’utilisateur de faire défiler une liste de chansons et de les
évaluer directement dans cette liste ?
Il y a une bonne et une mauvaise nouvelle.
La bonne est que l’on peut mettre des widgets interactifs dans les lignes ; la mauvaise est
que c’est un peu compliqué, notamment lorsqu’il faut intervenir parce que l’état du widget
interactif a changé (une valeur a été tapée dans un champ, par exemple). Il faut en effet
stocker cet état quelque part puisque notre widget RatingBar sera recyclé lors du défilement de la ListView. On doit pouvoir configurer l’état de la RatingBar en fonction du
mot qui est visible lorsque la RatingBar est recyclée et sauvegarder cet état, afin de le
restaurer plus tard lorsque cette ligne précise redeviendra visible.
Par défaut, la RatingBar n’a absolument aucune idée de la manière dont les données de
l’ArrayAdapter doivent être affichées. Après tout, une RatingBar n’est qu’un widget
utilisé dans une ligne d’une ListView. Nous devons donc apprendre aux lignes quels sont
les modèles qu’elles affichent, afin qu’elles sachent quel état de modèle modifier lorsque
leurs barres d’évaluation sont cochées.
Étudions l’activité du projet FancyLists/RateList. On utilisera ici les mêmes classes de
base que celles de l’exemple précédent – on affiche une liste de mots quelconques que l’on
pourra évaluer. Les mots ayant la note maximale apparaîtront tout en majuscules.
public class RateListDemo extends ListActivity {
TextView selection;
String[] items={"lorem", "ipsum", "dolor", "sit", "amet",
"consectetuer", "adipiscing", "elit", "morbi", "vel",
"ligula", "vitae", "arcu", "aliquet", "mollis",
"etiam", "vel", "erat", "placerat", "ante",
"porttitor", "sodales", "pellentesque", "augue",
"purus"};
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
ArrayList list=new ArrayList();
for (String s : items) {
list.add(new RowModel(s));
}
Livre Android.book Page 94 Dimanche, 8. novembre 2009 12:23 12
Précédent

- 109/391

Suivant