IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Tutoriel sur la présentation du composant graphique « RecyclerView » sous Android,
Par Feanorin

Le , par Feanorin

40PARTAGES

3  0 
Bonjour,

Vous trouverez ici Tutoriel sur la présentation du composant graphique « RecyclerView » sous Android.

Ce tutoriel va s'intéresser à un nouveau composant qui est le RecyclerView permettant d'afficher une liste d'articles dans un ensemble de sous-vues.
N'hésitez pas à réagir.

Bonne lecture.

Merci.

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de grunk
Modérateur https://www.developpez.com
Le 26/06/2015 à 10:49
Pour mémoire , l'affichage de liste d'articles sous Android se faisait via le composant ListView, GridView, etc. Ces composants avaient quelques ralentissements lorsque nous affichions leurs articles (items).
Tu parles du cas où il sont implémenté sans ViewHolder ? Parce que avec un viewHolder j'ai jamais eu de problème de perf (bon j'ai pas non plus des liste de 10k éléments).

Du peu que j'ai testé le RecyclerView semble bien pratique (enfin une liste horizontale !) mais un peu plus complexe à mettre en place.

Par contre j'ai l'impression qu'on perd complètement la possibilité d'utiliser un CursorAdapter de base et qu'il faut passer par un tableau intermédiaire. Non ?

Le lien vers le dépot github ne fonctionne pas
0  0 
Avatar de Feanorin
Expert éminent https://www.developpez.com
Le 26/06/2015 à 22:29
Tu parles du cas où il sont implémenté sans ViewHolder ?
Oui exactement . Le recyclerView oblige ce pattern.

Par contre j'ai l'impression qu'on perd complètement la possibilité d'utiliser un CursorAdapter de base et qu'il faut passer par un tableau intermédiaire. Non ?
Je n'ai pas vu son utilisation mais je pense qu'il y a moyen de créer son propre adapter en se basant sur le code du CursorAdapter, il faudrait regarder mais de base dans la SDK je n'ai rien vu.
0  0 
Avatar de MasterMbg
Modérateur https://www.developpez.com
Le 20/07/2015 à 11:40
Bonjour Florian,

Merci pour ce tutoriel. Il est bien expliqué et je ne peux que .

Seulement, je n'arrive pas à m'en sortir alors que je reproduis exactement le même code (question de voir comment ça marche ) que tu mis dans le tuto. A chaque exécution j'ai l'erreur suivant :
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
07-20 05:37:19.430  19448-19448/com.example.mastermbg.recycleview E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.chrislonembg.recycleview, PID: 19448
    java.lang.NullPointerException
            at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:1694)
            at android.view.View.measure(View.java:16497)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
            at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
            at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
            at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
            at android.view.View.measure(View.java:16497)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at android.view.View.measure(View.java:16497)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
            at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
            at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
            at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
            at android.view.View.measure(View.java:16497)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
            at android.view.View.measure(View.java:16497)
            at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916)
            at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
            at android.view.Choreographer.doCallbacks(Choreographer.java:574)
            at android.view.Choreographer.doFrame(Choreographer.java:544)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)
Mon fichier grandle lui se présente comme suit :
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "23.0.0 rc3"

    defaultConfig {
        applicationId "com.example.mastermbg.recycleview"
        minSdkVersion 9
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.android.support:recyclerview-v7:21.0.0'
}
J'exécute sur emulateur avec la version kitkat pour info.

Pourrais tu m'aider à corriger cette erreur please?

Merci d'avance.

Christian,
0  0 
Avatar de Feanorin
Expert éminent https://www.developpez.com
Le 25/07/2015 à 18:17
Salut,

On dirait que ton problème provient d'un mauvais contexte passé à ton LinearLayoutManager si c'est celui là ?

T'es tu basé sur le projet github ou bien à tu reconstruis le projet à partir des exemples ?
0  0 
Avatar de MasterMbg
Modérateur https://www.developpez.com
Le 25/07/2015 à 18:34
Citation Envoyé par Feanorin Voir le message
Salut,
T'es tu basé sur le projet github ou bien à tu reconstruis le projet à partir des exemples ?
Je ne me suis basé sur aucun projet, même pas construit le projet à partir des exemples.
Je suis entrain de suivre ton tutoriel, j'ai créé un nouveau projet à partir de zéro, j'ai ajouter dans le gradle la ligne "compile 'com.android.support:recyclerview-v7'".
Quand je synchronise le fichier gradle j'ai l'erreur suivante :
Code : Sélectionner tout
1
2
Error:Failed to resolve: com.android.support:recyclerview-v7:
<a href="install.m2.repo">Install Repository and sync project</a><br><a href="openFile">Open File</a>
Je ne sais plus quoi faire

Christian,
0  0 
Avatar de IsiTech
Membre actif https://www.developpez.com
Le 25/07/2015 à 20:53
Ça me parait bizarre de ne pas préciser la version dans la ligne compile, essai la ligne suivante :

Code : Sélectionner tout
compile 'com.android.support:recyclerview-v7:22.2.1'
et vérifie dans le SDK Manager que tu as bien installé "Android Support Library" dans la partie "Extras" (La version indiquée est celle que tu dois utiliser dans la ligne "compile".

J'ai crée une application utilisant les RecyclerView il y a quelques jours et aucun problème pour moi.
0  0 
Avatar de Feanorin
Expert éminent https://www.developpez.com
Le 01/09/2015 à 13:04
Ça me parait bizarre de ne pas préciser la version dans la ligne compile
Normalement il prend la dernière version.

Il est préférable de mettre la version pour des problème de compatibilité entre lib.
0  0