Android Part5-2
Android Part5-2
Android Part5-2
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
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