Premiers pas avec recyclerview

##Installation et configuration L’affichage des éléments dans une liste ou des grilles est un modèle très courant dans les applications mobiles. L’utilisateur voit une collection d’éléments et peut les faire défiler. La collection d’éléments peut être une liste, une grille ou une autre représentation structurée de données.

Le widget RecyclerView est une version plus avancée et flexible de [ListView][1]. Ce widget est un conteneur pour afficher de grands ensembles de données qui peuvent être parcourus très efficacement en maintenant un nombre limité de vues. Utilisez le widget RecyclerView lorsque vous avez des collections de données dont les éléments changent au moment de l’exécution en fonction de l’action de l’utilisateur ou des événements réseau.

La classe RecyclerView simplifie l’affichage et la gestion de grands ensembles de données en fournissant :

  • Gestionnaires de mise en page pour le positionnement des éléments
  • Animations par défaut pour les opérations courantes sur les éléments, telles que la suppression ou ajout d’articles

Vous avez également la possibilité de définir des gestionnaires de mise en page personnalisés et des animations pour les widgets “RecyclerView”.

[![entrez la description de l’image ici][2]][2]

Pour utiliser le widget RecyclerView, vous devez spécifier un adaptateur et un gestionnaire de mise en page. Pour créer un adaptateur, étendez la classe RecyclerView.Adapter. Les détails de la mise en œuvre dépendent des spécificités de votre ensemble de données et du type de vues.

[![entrez la description de l’image ici][3]][3]

Un gestionnaire de mise en page positionne les vues d’éléments dans une RecyclerView et détermine quand réutiliser les vues d’éléments qui ne sont plus visibles pour l’utilisateur. Pour réutiliser (ou recycler) une vue, un gestionnaire de mise en page peut demander à l’adaptateur de remplacer le contenu de la vue par un élément différent de l’ensemble de données. Le recyclage des vues de cette manière améliore les performances en évitant la création de vues inutiles ou en effectuant des recherches [findViewById()][4] coûteuses.

RecyclerView fournit ces gestionnaires de mise en page intégrés :

  • [LinearLayoutManager][5] affiche les éléments dans un format vertical ou horizontal liste déroulante.
  • [GridLayoutManager][6] affiche les éléments dans une grille.
  • [StaggeredGridLayoutManager][7] affiche les éléments dans une grille échelonnée.

Pour créer un gestionnaire de mise en page personnalisé, étendez la classe [RecyclerView.LayoutManager][8].

Maintenant, pour ajouter un RecyclerView, vous devez ajouter la dépendance suivante dans votre build.gradle

dependencies {
    compile 'com.android.support:recyclerview-v7:23.4.0'
}

Ajoutez maintenant un RecyclerView dans votre mise en page comme ceci.

<android.support.v7.widget.RecyclerView
    android:id="@+id/my_recycler_view"
    android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

Une fois que vous avez ajouté un widget RecyclerView à votre mise en page, obtenez un handle vers l’objet, connectez-le à un gestionnaire de mise en page et attachez un adaptateur pour les données à afficher.

public class MyActivity extends Activity {
    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity);
        mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

        // use this setting to improve performance if you know that changes
        // in content do not change the layout size of the RecyclerView
        mRecyclerView.setHasFixedSize(true);

        // use a linear layout manager
        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);

        // specify an adapter (see also next example)
        mAdapter = new MyAdapter(myDataset);
        mRecyclerView.setAdapter(mAdapter);
    }
    ...
}

L’adaptateur permet d’accéder aux éléments de votre ensemble de données, crée des vues pour les éléments et remplace le contenu de certaines vues par de nouveaux éléments de données lorsque l’élément d’origine n’est plus visible. L’exemple de code suivant montre une implémentation simple pour un ensemble de données composé d’un tableau de chaînes affichées à l’aide de widgets “TextView”.

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private String[] mDataset;

    // Provide a reference to the views for each data item
    // Complex data items may need more than one view per item, and
    // you provide access to all the views for a data item in a view holder
    public static class ViewHolder extends RecyclerView.ViewHolder {
        // each data item is just a string in this case
        public TextView mTextView;
        public ViewHolder(TextView v) {
            super(v);
            mTextView = v;
        }
    }

    // Provide a suitable constructor (depends on the kind of dataset)
    public MyAdapter(String[] myDataset) {
        mDataset = myDataset;
    }

    // Create new views (invoked by the layout manager)
    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {
        // create a new view
        View v = LayoutInflater.from(parent.getContext())
                               .inflate(R.layout.my_text_view, parent, false);
        // set the view's size, margins, paddings and layout parameters
        ...
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        // - get element from your dataset at this position
        // - replace the contents of the view with that element
        holder.mTextView.setText(mDataset[position]);

    }

    // Return the size of your dataset (invoked by the layout manager)
    @Override
    public int getItemCount() {
        return mDataset.length;
    }
}

[1] : https://developer.android.com/reference/android/widget/ListView.html [2] : http://i.stack.imgur.com/KQtZj.png [3] : http://i.stack.imgur.com/LhpwC.png [4] : https://developer.android.com/reference/android/app/Activity.html#findViewById(int) [5] : https://developer.android.com/reference/android/support/v7/widget/LinearLayoutManager.html [6] : https://developer.android.com/reference/android/support/v7/widget/GridLayoutManager.html [7] : https://developer.android.com/reference/android/support/v7/widget/StaggeredGridLayoutManager.html [8] : https://developer.android.com/reference/android/support/v7/widget/RecyclerView.LayoutManager.html

Ajoutez d’abord la bibliothèque de support à votre projet : dans le fichier build.gradle de l’application, ajoutez la dépendance.

[![Dans la vue Projet, sous “app”, ouvrez le fichier build.gradle][1]][1]

[1] : http://i.stack.imgur.com/b1Itj.png