Propriété de Albiri Sigue
customer 27921 at Fri Mar 11 19:19:45 +0100 2011
Chapitre 9
S’amuser avec les listes 89
Utilisation de convertView
La méthode getView() reçoit en paramètre un objet View nommé, par convention,
convertView. Parfois, cet objet est null, auquel cas vous devez créer une nouvelle View
pour la ligne (par inflation), comme nous l’avons expliqué plus haut.
Si convertView n’est pas null, en revanche, il s’agit en fait de l’une des View que vous avez
déjà créées. Ce sera notamment le cas lorsque l’utilisateur fait défiler la ListView : à mesure
que de nouvelles lignes apparaissent, Android tentera de réutiliser les vues des lignes qui
ont disparu à l’autre extrémité, vous évitant ainsi de devoir les reconstruire totalement.
En supposant que chaque ligne ait la même structure de base, vous pouvez utiliser findViewById() pour accéder aux différents widgets qui composent la ligne, modifier leur
contenu, puis renvoyer convertView à partir de getView() au lieu de créer une ligne totalement nouvelle.
Voici, par exemple, une écriture optimisée de l’implémentation précédente de getView(),
extraite du projet FancyLists/Recycling :
public class RecyclingDemo 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);
setListAdapter(new IconicAdapter(this));
selection=(TextView)findViewById(R.id.selection);
}
public void onListItemClick(ListView parent, View v,
int position, long id) {
selection.setText(items[position]);
}
class IconicAdapter extends ArrayAdapter {
Activity context;
IconicAdapter(Activity context) {
super(context, R.layout.row, items);
this.context=context;
}
Livre Android.book Page 89 Dimanche, 8. novembre 2009 12:23 12
customer 27921 at Fri Mar 11 19:19:45 +0100 2011
Chapitre 9
S’amuser avec les listes 89
Utilisation de convertView
La méthode getView() reçoit en paramètre un objet View nommé, par convention,
convertView. Parfois, cet objet est null, auquel cas vous devez créer une nouvelle View
pour la ligne (par inflation), comme nous l’avons expliqué plus haut.
Si convertView n’est pas null, en revanche, il s’agit en fait de l’une des View que vous avez
déjà créées. Ce sera notamment le cas lorsque l’utilisateur fait défiler la ListView : à mesure
que de nouvelles lignes apparaissent, Android tentera de réutiliser les vues des lignes qui
ont disparu à l’autre extrémité, vous évitant ainsi de devoir les reconstruire totalement.
En supposant que chaque ligne ait la même structure de base, vous pouvez utiliser findViewById() pour accéder aux différents widgets qui composent la ligne, modifier leur
contenu, puis renvoyer convertView à partir de getView() au lieu de créer une ligne totalement nouvelle.
Voici, par exemple, une écriture optimisée de l’implémentation précédente de getView(),
extraite du projet FancyLists/Recycling :
public class RecyclingDemo 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);
setListAdapter(new IconicAdapter(this));
selection=(TextView)findViewById(R.id.selection);
}
public void onListItemClick(ListView parent, View v,
int position, long id) {
selection.setText(items[position]);
}
class IconicAdapter extends ArrayAdapter {
Activity context;
IconicAdapter(Activity context) {
super(context, R.layout.row, items);
this.context=context;
}
Livre Android.book Page 89 Dimanche, 8. novembre 2009 12:23 12
