RecyclerView
Une RecyclerView est une nouvelle façon d’afficher une liste ou une grille de vues.
Elle peut s’apparenter à une ListView mais permet beaucoup plus de personnalisation.
Cette nouvelle vue est disponible dans la librairie de support v7 d’android, il vous
faut donc commencer par importer dans votre fichier gralde :
dependencies {
implementation '[Link]:recyclerview-v7:28.0.0'
}
Ou bien :
implementation "[Link]:recyclerview:1.1.0"
Comme toutes vues, il faut la déclarer dans nos layout xml :
<?xml version="1.0" encoding="utf-8"?>
<!-- A RecyclerView with some commonly used attributes -->
<[Link]
android:id="@+id/my_recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/tv_nom"
android:layout_weight="1"/>
<TextView
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/tv_num"
android:layout_weight="1"/>
</LinearLayout>
A la même façon que les ListView, il faut créer un Adapter, mais cette fois ci il doit
étendre [Link]<Votre type (içi Element)>. Cet adapter est typé pour un
fonctionner avec une certaine classe de ViewHolder (objet qui va garder les références vers
les vues de chaque cellule). Dans notre cas il va donc falloir créer un ViewHolder, nous le
nommerons MyViewHolder.
EN KOTLIN
class Element ( var nom :String , numero :Int)
En JAVA
class Element {
public String nom, numero;
public Element(String nom, String numero) {
[Link] = nom;
[Link] = numero;
}
}
EN KOTLIN
class MyAdapter (val con:Context,val myData: Array<Element>)
: [Link]<[Link]>()
{
override fun onCreateViewHolder(p0: ViewGroup, position: Int): MyViewHolder {
// Creation nouvelles vues
val layout = [Link](con)
.inflate([Link], null) as LinearLayout
return MyViewHolder(layout)// recuperation des sous composants
}
override fun getItemCount(): Int {
// definier la taille
return [Link]
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
// Mettre à jour un vue déjà crée
var e=[Link](position)
// récupérer l’élément depuis la liste des données myData
[Link]=[Link]
[Link]=[Link]()
// modifier le contenu d’un vue par les valeurs de cet élément
}
inner class MyViewHolder(parent: View) : [Link](parent)
{
//recuperation des sous composant du layout depuis son Context : parent
var tvnom=[Link]([Link].tv_nom) as TextView
var tvnum=[Link]([Link].tv_num) as TextView
}
}
En JAVA
class MonAdapter extends [Link] <[Link]>{
Context context;
ArrayList<Element> data;
public MonAdapter(Context context, ArrayList<Element> data) {
[Link] = context;
[Link] = data;
}
class MyViewHolder extends [Link]
{
TextView t1;
Button b;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
t1=[Link]([Link].t1);
b=[Link]([Link].b);
}
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inf=[Link](context);
LinearLayout l= (LinearLayout) [Link]([Link],parent,false);
return new MyViewHolder(l);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
Element c=[Link](position);
[Link]([Link]);
[Link]([Link]);
}
@Override
public int getItemCount() {
return [Link]();
}
}
Utilisons le maintenant dans notre Activity
Une étape importante est d’affecter un LayoutManager à notre activity, sinon une erreur
sera levée : RecyclerView﹕ No layout manager attached; skipping layout
EN KOTLIN
// in content do not change the layout size of the RecyclerView
[Link](true)
//définit l'agencement des cellules, ici de façon verticale, comme une ListView
[Link](LinearLayoutManager(getApplicationContext()));
// specify an viewAdapter (see also next example)
[Link] = viewAdapter
En JAVA
MonAdapter ad=new MonAdapter(this, data);
[Link](ad);
[Link](new LinearLayoutManager(this));
//pour adapter en grille comme une RecyclerView, avec 2 cellules par ligne
//[Link](new GridLayoutManager(this,2));
//[Link](new
//LinearLayoutManager(this,[Link],false));
Pour plus de détails :
[Link]