Meilleure application Android ? les bases essentielles pour le développement Android

Cours le développement Android pour une meilleure application, tutoriel & guide de travaux pratiques en pdf.

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<RowModel> list=new ArrayList<RowModel>();
for (String s : items) {
list.add(new RowModel(s));
}
setListAdapter(new CheckAdapter(this, list));
selection=(TextView)findViewById(R.id.selection);
}
private RowModel getModel(int position) {
return(((CheckAdapter)getListAdapter()).getItem(position));
}
public void onListItemClick(ListView parent, View v,
int position, long id) {
selection.setText(getModel(position).toString());
}
class CheckAdapter extends ArrayAdapter<RowModel> {
Activity context;
CheckAdapter(Activity context, ArrayList<RowModel> list) {
super(context, R.layout.row, list);
this.context=context;
}
public View getView(int position, View convertView,
ViewGroup parent) {
View row=convertView;
ViewWrapper wrapper;
RatingBar rate;
if (row==null) {
LayoutInflater inflater=context.getLayoutInflater();
row=inflater.inflate(R.layout.row, null);
wrapper=new ViewWrapper(row);
row.setTag(wrapper);
rate=wrapper.getRatingBar();
RatingBar.OnRatingBarChangeListener l=
new RatingBar.OnRatingBarChangeListener() {
public void onRatingChanged(RatingBar ratingBar,
float rating,
boolean fromTouch) {
Integer myPosition=(Integer)ratingBar. getTag();
RowModel model=getModel(myPosition);
model.rating=rating;
LinearLayout parent=(LinearLayout)ratingBar. getParent();
TextView label=(TextView)parent.findViewById(R.id.label);
label.setText(model.toString());
}
};
rate.setOnRatingBarChangeListener(l);
}
else {
wrapper=(ViewWrapper)row.getTag();
rate=wrapper.getRatingBar();
}
RowModel model=getModel(position);
wrapper.getLabel().setText(model.toString());
rate.setTag(new Integer(position));
rate.setRating(model.rating);
return(row);
}
}
class RowModel {
String label;
float rating=2.0f;
RowModel(String label) {
this.label=label;
}
public String toString() {
if (rating>=3.0) {
return(label.toUpperCase());
}
return(label);
}
}
}

Les différences entre cette activité et la précédente sont les suivantes :
● Bien que nous utilisions toujours un tableau de String pour stocker la liste des mots, on le transforme en liste d’objets RowModel au lieu de le fournir à un ArrayAdapter.
Ici, le RowModel est un ersatz de modèle mutable car il se contente de combiner un mot et son état de sélection. Dans un vrai système, il pourrait s’agir d’objets remplis à partir d’un Cursor et les propriétés auraient des significations métier plus importantes.
● Les méthodes utilitaires comme onListItemClick() doivent être modifiées pour refléter les différences entre un modèle String pur et l’utilisation d’un RowModel.
● Dans getView(), la sous-classe d’ArrayAdapter (CheckAdapter) teste si convertView est null, auquel cas elle crée une nouvelle ligne par inflation d’un layout simple (voir le code qui suit) et lui attache un ViewWrapper.
Pour la RatingBar de la ligne, on ajoute un écouteur onRatingChanged() anonyme qui examine le marqueur de la ligne (getTag()) et le convertit en entier représentant la position dans l’ArrayAdapter de ce qu’affiche cette ligne. La barre d’évaluation peut alors obtenir le bon RowModel pour la ligne et mettre à jour le modèle en fonction de son nouvel état. Elle modifie également le texte situé à côté de la barre pour qu’il corresponde à l’état de celle-ci.
● On s’assure toujours que la RatingBar a le bon contenu et dispose d’un marqueur (via setTag()) pointant vers la position de la ligne dans l’adaptateur.

Introduction
Partie I – Concepts de base 
1. Tour d’horizon
2. Structure d’un projet
3. Contenu du manifeste
Partie II – Les activités 
4. Création d’un squelette d’application
5. Utilisation des layouts XML
6. Utilisation des widgets de base
7. Conteneurs
8. Widgets de sélection
9. S’amuser avec les listes
10. Utiliser de jolis widgets et de beaux conteneurs
11. Utilisation des menus
12. Polices de caractères
13. Intégrer le navigateur de WebKit
14. Affichage de messages surgissant
15. Utilisation des threads
16. Gestion des événements du cycle de vie d’une activité
Partie III – Stockage de données, services réseaux et API
17. Utilisation des préférences
18. Accès aux fichiers
19. Utilisation des ressources
20. Accès et gestion des bases de données locales
21. Tirer le meilleur parti des bibliothèques Java
22. Communiquer via Internet
Partie IV – Intentions (Intents)
23. Création de filtres d’intentions
24. Lancement d’activités et de sous-activités
25. Trouver les actions possibles grâce à l’introspection
26. Gestion de la rotation
Partie V – Fournisseurs de contenus et services
27. Utilisation d’un fournisseur de contenu (content provider)
28. Construction d’un fournisseur de contenu
29. Demander et exiger des permissions
30. Création d’un service
31. Appel d’un service
32. Alerter les utilisateurs
avec des notifications
Partie VI – Autres fonctionnalités d’Android
33. Accès aux services de localisation
34. Cartographie avec MapView et MapActivity
35. Gestion des appels téléphoniques
36. Recherches avec SearchManager
37. Outils de développement
38. Pour aller plus loin
Index

Si le lien ne fonctionne pas correctement, veuillez nous contacter (mentionner le lien dans votre message)
Cours développement pour meilleure application Android (6,97 MO) (Cours PDF)
bases essentielles pour le développement Android

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *