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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Créer une liste ressemblant au répertoire


Sujet :

Android

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 37
    Par défaut Créer une liste ressemblant au répertoire
    Bonjour,
    je créé une listView comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ArrayList<Entry> listeMotAnglais = new ArrayList<String>();
    for(Entry e : ContainerData.getFeeds(this))
         listeMotAnglais.add(e.getMotAnglais();
     
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listeMotAnglais);
    vue = (ListView) findViewById(R.id.listView);
    vue.setAdapter(arrayAdapter);
    Cependant, j'aimerais que cette liste soit triée par ordre alphabétique (car elle ne l'ai pas forcément) et y insérer un curseur qui ressemble à celui du répertoire android (avec l'affichage des lettres et la possibilité de parcourir la liste grâce au curseur).

    Comme ceci :






    Est-ce qu'il y a un layout qui permet ça ? J'ai parcouru les forums mais je n'arrive pas à trouver de réponse clair ou compréhensible pour moi, vous avez une idée ?

  2. #2
    Jay
    Jay est déconnecté
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2002
    Messages : 124
    Par défaut
    Bonjour,

    En ce qui concerne le trie, il suffit d'implémenter "IComparable" dans ton objet pour le "Sort()".

    Pour le reste.. je ne sais pas trop, mais tu pourrais rajouter un layout lors du slide (regarde du cote du relativeLayout) pour afficher la lettre.

    Cordialement,

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 37
    Par défaut
    J'ai écrit ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public class ContainerData implements IComparable
    cependant Eclipse me dit créer l'interface IComparable. Je suppose que ça n'existe pas pour les systèmes android

  4. #4
    Jay
    Jay est déconnecté
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2002
    Messages : 124
    Par défaut
    Ha... effectivement, je suis entrain de faire du C# et j'ai melangé...

    Pour Android, tu peux faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String s1, String s2) {
                return s1.compareToIgnoreCase(s2);
            }
        });
    ou implementer :
    Cordialement,

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 37
    Par défaut
    et le sort ne marche pas pour le type ArrayList =/


    Ce que je ne comprends pas très bien, c'est ou le mettre ? là ou j'utilise la liste, dans ma classe Entry, ou dans ma classe ContainerData qui génère la liste ?

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Il y a trois choses:
    1. Trier les données.
    2. Dire à la listview d'utiliser le "fastScroll" (android:fastScrollEnabled ou un truc du genre)
    3. Ecouter la position de la listview et afficher la "lettre en cours".

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 37
    Par défaut
    Merci nicroman, mais j'ai eu beau chercher dans la doc ListView et dans ArrayAdapter, je n'ai pas trouvé comment on "écoutait la position dans la listView"...

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 37
    Par défaut
    Ah merci, j'ai réussi à faire ce que je voulais.
    C'est quoi la différence entre ListView et ABSListView ?

  10. #10
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Abs. = Abstract

    Regardes la hierarchie des classes....

    View (c'est une view)
    ViewGroup (qui contient d'autres views)
    AdapterView (qui utilise un Adapter pour créer ces 'sous-views')
    AbsListView (pour gérer une liste d'objets)
    ListView, [ou GridView]. (présentée sous forme de liste [ou de grille])
    ExpandableListView.. (avec des éléments "expandable")

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 37
    Par défaut
    Ah oui effectivement, désolé pour ces questions idiotes... je suis un noob en JAVA...

    D'ailleurs j'étais persuadé que ça marcherait...
    Mais quand je commence mon scroll, l'appli plante.

    Voilà mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    // création de la vue
    final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, l);
    vue = (ListView) findViewById(R.id.listView);
    vue.setAdapter(arrayAdapter);
     
    // affichage de la lettre courante
    final Context context = this;
    vue.setOnScrollListener(new OnScrollListener()
    {
    	@Override
    	public void onScrollStateChanged(AbsListView view, int scrollState) 
    	{
    		char lettre = arrayAdapter.getItem(scrollState).charAt(0);
    		Toast.makeText(context, lettre, Toast.LENGTH_SHORT).show();
    	}
     
    	@Override
    	public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) 
    	{
     
    	}
    });
    Une idée ?

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 37
    Par défaut
    même si je mets le Toast dans onScroll ça ne marche pas

  13. #13
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Si l'appli plante elle pond une erreur
    Si elle pond une erreur elle est dans le logcat
    Si elle est de le logcat il nous la faut..

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 37
    Par défaut
    ah oui désolé : voilà si je mets le toast dans le scroll



    et si je le mets dans le onScrollStateChanged :


  15. #15
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    ctrl+c du logcat
    ctrl+v dans une balise code marche bien aussi....

    Bon... alors il faut vite vite apprendre à lire les exceptions...
    Ici la cause est: "ResourceNotFoundException" (0x41)...

    Et du coup on regarde le code pour savoir quelle ressource est passée à makeText (deux lignes au dessous de l'exception dans le logcat)... et... bim on trouve...

    On passe pas une ressource mais un 'char' (qui est un int => pas d'erreur java).
    Toast.makeText(..., char,..); va donc convertir le char 'A' (0x41) en int (0x41) et le passer à makeText qui attend.... un identifiant de ressource de type "string"... et bim... pas de resource... exception.

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 37
    Par défaut
    effectivement, j'avais changé le type de lettre à String car la méthode charAt renvoit un char, du coup j'ai utilisé substring(0,1) et ça marche... plus ou moins

    ça m'affiche la lettre au commencement du scroll mais ne la change pas au fur et à mesure du scroll. Je me suis peut-être attaqué à trop gros

  17. #17
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @Override
    	public void onScrollStateChanged(AbsListView view, int scrollState) 
    	{
    		char lettre = arrayAdapter.getItem(scrollState).charAt(0);
    		Toast.makeText(context, lettre, Toast.LENGTH_SHORT).show();
    	}


    Il n'y a rien qui te choque là ?
    public abstract void onScrollStateChanged (AbsListView view, int scrollState)

    Added in API level 1
    Callback method to be invoked while the list view or grid view is being scrolled. If the view is being scrolled, this method will be called before the next frame of the scroll is rendered. In particular, it will be called before any calls to getView(int, View, ViewGroup).

    Parameters
    view The view whose scroll state is being reported
    scrollState The current scroll state. One of SCROLL_STATE_IDLE, SCROLL_STATE_TOUCH_SCROLL or SCROLL_STATE_IDLE.
    Alors que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @Override
    	public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) 
    	{
     
    	}

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/07/2006, 20h14
  2. Créer une liste d'objets statiques dans une classe
    Par crossbowman dans le forum C++
    Réponses: 3
    Dernier message: 13/03/2006, 09h11
  3. Réponses: 3
    Dernier message: 20/02/2006, 18h32
  4. [EXCEL]Créer une liste (combo)
    Par elitost dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/12/2005, 16h55
  5. Réponses: 5
    Dernier message: 29/09/2005, 14h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo