Propriété de Albiri Sigue
customer 27921 at Fri Mar 11 19:19:45 +0100 2011
86 L’art du développement Android
● Vous devez configurer chaque ligne différemment (par exemple pour mettre des icônes
différentes en fonction des cas).
Dans ces situations, la meilleure solution consiste à créer une sous-classe de l’Adapter
voulu, à redéfinir getView() et à construire soi-même les lignes. La méthode
getView() doit renvoyer un objet View représentant la ligne située à la position fournie
par l’adaptateur.
Reprenons par exemple le code précédent pour obtenir, grâce à getView(), des icônes
différentes en fonction des lignes – une icône pour les mots courts, une autre pour les mots
longs. Ce projet se trouve dans le répertoire FancyLists/Dynamic des exemples :
public class DynamicDemo 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;
}
public View getView(int position, View convertView,
ViewGroup parent) {
LayoutInflater inflater=context.getLayoutInflater();
View row=inflater.inflate(R.layout.row, null);
TextView label=(TextView)row.findViewById(R.id.label);
label.setText(items[position]);
Livre Android.book Page 86 Dimanche, 8. novembre 2009 12:23 12
Précédent

- 101/391

Suivant