Académique Documents
Professionnel Documents
Culture Documents
Android
1 / 72 Pierre Nerzic
Android - Semaine 4
Source:
https://help.duda.co/hc/e
n-us/articles/225678708-
Mobile-Management-App
-for-eCommerce
2 / 72 Pierre Nerzic
Android - Semaine 4
Présentation
Présentation
3 / 72 Pierre Nerzic
Android - Semaine 4
Présentation
Principe général
4 / 72 Pierre Nerzic
Android - Semaine 4
Présentation
Schéma global
5 / 72 Pierre Nerzic
Android - Semaine 4
Présentation
@Override
public String toString() {
return p_intitule + Float.toString(p_prix) +" dh";
}
6 / 72 Pierre Nerzic
Android - Semaine 4
Présentation
Données initiales
7 / 72 Pierre Nerzic
Android - Semaine 4
Présentation
void onCreate(...)
{
...
8 / 72 Pierre Nerzic
Android - Semaine 4
Présentation
10 / 72 Pierre Nerzic
Android - Semaine 4
Présentation
11 / 72 Pierre Nerzic
Android - Semaine 4
Présentation
Remarques
12 / 72 Pierre Nerzic
Android - Semaine 4
Affichage de la liste
Affichage de la liste
13 / 72 Pierre Nerzic
Android - Semaine 4
Affichage de la liste
Deux possibilités :
employer la classe ListActivity,
employer la classe Activity de base.
Ces deux possibilités sont très similaires : leur layout contient un
ListView, il y a un layout pour les items de la liste et un
adaptateur pour accéder aux données.
La ListActivity prépare un peu plus de choses pour gérer les
sélections d’items. Par exemple, si on rajoute un TextView
particulier, on peut avoir un message « La liste est vide ».
Tandis qu’avec une simple Activity, c’est à nous de tout faire,
voir page 46 pour la gestion des clics.
14 / 72 Pierre Nerzic
Android - Semaine 4
Affichage de la liste
Mise en œuvre
15 / 72 Pierre Nerzic
Android - Semaine 4
Affichage de la liste
Classiquement :
@Override
protected void onCreate(Bundle savedInstanceState)
{
// appeler la méthode surchargée dans la superclasse
super.onCreate(savedInstanceState);
// initialisation de la liste
mListe = new ArrayList<>();
...
17 / 72 Pierre Nerzic
Android - Semaine 4
Adaptateurs
Adaptateurs
18 / 72 Pierre Nerzic
Android - Semaine 4
Adaptateurs
19 / 72 Pierre Nerzic
Android - Semaine 4
Adaptateurs
20 / 72 Pierre Nerzic
Android - Semaine 4
Adaptateurs
Adaptateurs prédéfinis
21 / 72 Pierre Nerzic
Android - Semaine 4
Adaptateurs
Exemple d’emploi
Suite de la méthode onCreate de l’activité, on fournit la
ArrayList<Product> mListe au constructeur d’adaptateur :
24 / 72 Pierre Nerzic
Android - Semaine 4
Adaptateurs
<TextView xmlns:android="..."
android:id="@+id/item_libelle"
android:textStyle="bold"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
25 / 72 Pierre Nerzic
Android - Semaine 4
Adaptateurs
Autre layouts
Layouts prédéfinis
27 / 72 Pierre Nerzic
Android - Semaine 4
Adaptateurs
28 / 72 Pierre Nerzic
Android - Semaine 4
Adaptateur personnalisé
Adaptateur personnalisé
29 / 72 Pierre Nerzic
Android - Semaine 4
Adaptateur personnalisé
30 / 72 Pierre Nerzic
Android - Semaine 4
Adaptateur personnalisé
public
View getView(int position, View recup, ViewGroup parent);
31 / 72 Pierre Nerzic
Android - Semaine 4
Adaptateur personnalisé
Une vue qui devient invisible d’un côté, à cause du scrolling, est
renvoyée de l’autre côté, comme sur un tapis roulant, en modifiant
seulement son contenu :
33 / 72 Pierre Nerzic
Android - Semaine 4
Adaptateur personnalisé
Méthode ProductView.create
Cette méthode crée une instance de ProductView qui est un
groupe de vues pour afficher un item des données.
La méthode ProductAdapter.getView crée des
ProductView à la demande du ListView,
Un ProductView est une sorte deRelativeLayout
contenant des TextView etImageView
35 / 72 Pierre Nerzic
Android - Semaine 4
Adaptateur personnalisé
36 / 72 Pierre Nerzic
Android - Semaine 4
Adaptateur personnalisé
Cette classe a pour but de gérer les vues dans lesquelles il y a les
informations des produits : Intitulé, prix, description.
On la met à la place de la balise RelativeLayout :
<?xml version="1.0" encoding="utf-8"?>
<ma.ceft.products.ProductView ...>
<ImageView android:id="@+id/item_image" .../>
<TextView android:id="@+id/item_libelle" .../>
<TextView android:id="@+id/item_prix" .../>
</ma.ceft.products.ProductView>
37 / 72 Pierre Nerzic
Android - Semaine 4
Adaptateur personnalisé
LayoutInflater li = LayoutInflater.from(context);
View itemView = li.inflate(R.layout.item, parent);
On lui fournit l’identifiant du layout, p. ex. celui des items. Elle crée
les vues spécifiées dans res/layout/item.xml.
context est l’activité qui affiche toutes ces vues,
parent est la vue qui doit contenir ces vues, null si aucune.
39 / 72 Pierre Nerzic
Android - Semaine 4
Adaptateur personnalisé
Méthode ProductView.create
Méthode findViews
41 / 72 Pierre Nerzic
Android - Semaine 4
Adaptateur personnalisé
42 / 72 Pierre Nerzic
Android - Semaine 4
Adaptateur personnalisé
Récapitulatif
43 / 72 Pierre Nerzic
Android - Semaine 4
Adaptateur personnalisé
Le résultat
44 / 72 Pierre Nerzic
Android - Semaine 4
Actions utilisateur sur la liste
45 / 72 Pierre Nerzic
Android - Semaine 4
Actions utilisateur sur la liste
Les modifications sur les données doivent se faire par les méthodes
add, insert, remove et clear de l’adaptateur. Voir la doc.
Si ce n’est pas possible, par exemple parce qu’on a changé d’activité
et modifié les données sans adaptateur, alors au retour, par exemple
dans onActivityResult, il faut prévenir l’adaptateur par la
méthode suivante :
adapter.notifyDataSetChanged();
46 / 72 Pierre Nerzic
Android - Semaine 4
Actions utilisateur sur la liste
@Override
public void onListItemClick (
ListView l, View v, int position, long idvue)
{
// gérer un clic sur l'item identifié par position
...
}
47 / 72 Pierre Nerzic
Android - Semaine 4
Actions utilisateur sur la liste
48 / 72 Pierre Nerzic
Android - Semaine 4
Actions utilisateur sur la liste
49 / 72 Pierre Nerzic
Android - Semaine 4
Actions utilisateur sur la liste
50 / 72 Pierre Nerzic
Android - Semaine 4
Actions utilisateur sur la liste
51 / 72 Pierre Nerzic
Android - Semaine 4
Actions utilisateur sur la liste
@Override
protected void onCreate(Bundle savedInstanceState)
{
...
setListAdapter(
new ArrayAdapter<>(this
android.R.layout.simple_list_item_checked,
android.R.id.text1, mListe));
ListView lv = findViewById(android.R.id.list);
lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}
52 / 72 Pierre Nerzic
Android - Semaine 4
Actions utilisateur sur la liste
53 / 72 Pierre Nerzic
Android - Semaine 4
Actions utilisateur sur la liste
54 / 72 Pierre Nerzic
Android - Semaine 4
RecyclerView
RecyclerView
55 / 72 Pierre Nerzic
Android - Semaine 4
RecyclerView
Présentation
56 / 72 Pierre Nerzic
Android - Semaine 4
RecyclerView
Principes
57 / 72 Pierre Nerzic
Android - Semaine 4
RecyclerView
58 / 72 Pierre Nerzic
Android - Semaine 4
RecyclerView
...
LinearLayoutManager llm = new LinearLayoutManager(this);
recyclerView.setLayoutManager(llm);
59 / 72 Pierre Nerzic
Android - Semaine 4
RecyclerView
Mise en grille
...
GridLayoutManager glm = new GridLayoutManager(this, 2);
recyclerView.setLayoutManager(glm);
recyclerView.setHasFixedSize(true);
...
DividerItemDecoration dividerItemDecoration =
new DividerItemDecoration(recyclerView.getContext(),
llm.getOrientation());
recyclerView.addItemDecoration(dividerItemDecoration);
61 / 72 Pierre Nerzic
Android - Semaine 4
RecyclerView
Adaptateur de RecyclerView
ProductAdapter(List<Product> liste)
{
mListe = liste;
}
62 / 72 Pierre Nerzic
Android - Semaine 4
RecyclerView
@Override
public int getItemCount()
{
return mListe.size();
}
Dans le cas plus général où les données ne sont pas stockées dans
une liste, cela peut entraîner un calcul plus complexe.
63 / 72 Pierre Nerzic
Android - Semaine 4
RecyclerView
@Override
public void onBindViewHolder(ProductView itemView, int pos)
{
itemView.setItem(mListe.get(pos));
}
64 / 72 Pierre Nerzic
Android - Semaine 4
RecyclerView
67 / 72 Pierre Nerzic
Android - Semaine 4
Réponses aux sélections d’items
68 / 72 Pierre Nerzic
Android - Semaine 4
Réponses aux sélections d’items
Afficher la sélection
...
int clickedPosition = RecyclerView.NO_POSITION;
70 / 72 Pierre Nerzic
Android - Semaine 4
Réponses aux sélections d’items
72 / 72 Pierre Nerzic