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

Composants graphiques Android Discussion :

Tri ListView dans ListFragment


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Par défaut Tri ListView dans ListFragment
    Bonsoir ,
    J'ai crée un spinner qui permet de choisir le type de tri de la listview contenue dans un listfragment .
    Cependant lorsque je choisis un tri , la listview ne change pas... Je ne comprends pas pourquoi .

    voici mon code :
    Pour mon spinner :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    public void addListenerOnButton() {
     
            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                    Toast.makeText(adapterView.getContext(),
                            "OnItemClickListener : " + adapterView.getItemAtPosition(i).toString(),
                            Toast.LENGTH_SHORT).show();
     
                    switch (i)
                    {
                        case 0:
                            listFragment.sort(SortType.AlphaTitre);
                            break;
                        case 1:
                            listFragment.sort(SortType.AlphaDesc);
                            break;
                        case 2:
                            listFragment.sort(SortType.Importance);
                            break;
                        case 3:
                            listFragment.sort(SortType.DateCreation);
                            break;
                        case 4:
                            listFragment.sort(SortType.DateAlarme);
                            break;
                    }
                }
     
                @Override
                public void onNothingSelected(AdapterView<?> adapterView) {
     
                }
            });
        }
    Dans le listfragment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        public void sort(SortType type){
            adapter.sort(new MonComparator(type));
        }
    mon comparator :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    package com.hascoet.ubo_blocnote;
     
    import java.util.Comparator;
     
    /**
     * Created by Hascoet Kevin on 04/11/14.
     */
    public class MonComparator implements Comparator<Note> {
     
        private SortType orderType;
     
        public MonComparator(SortType type)
        {
            this.orderType=type;
        }
     
     
        @Override
        public int compare(Note note, Note note2) {
            int res=0;
            if(orderType == SortType.AlphaTitre){
                res = (note.getTitre()).compareTo(note2.getTitre());
            }else if(orderType==SortType.AlphaDesc){
                res=(note.getDescription()).compareTo(note.getDescription());
            }
            else if(orderType==SortType.DateCreation){
                res = (note.getDateCreation()).compareTo(note2.getDateCreation());
            }else if(orderType==SortType.DateAlarme){
                res = (note.getDate()).compareTo(note2.getDate());
            }else if(orderType==SortType.Importance){
                res=((Integer)note.getImportance()).compareTo((Integer)note2.getImportance());
            }
     
            return res;
        }
    }
    mon adapter :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    package com.hascoet.ubo_blocnote;
     
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
     
    import java.util.Comparator;
    import java.util.List;
     
    /**
     * Created by atlas on 30/10/14.
     */
    public class MonListeAdapter extends ArrayAdapter<Note> {
     
            private Integer[] images={
                    R.drawable.priorite_low,
                    R.drawable.priorite_medium,
                    R.drawable.priorite_high
            };
            private List<Note> notes;
     
            private Context context;
     
     
            public MonListeAdapter(Context context,List<Note> values){
                super(context,0);
                this.context=context;
                this.notes=values;
            }
     
     
        @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     
                View rowview = inflater.inflate(R.layout.listlayout,parent,false);
     
                TextView titre = (TextView)rowview.findViewById(R.id.titre);
                TextView desc = (TextView)rowview.findViewById(R.id.description);
                TextView alarme = (TextView)rowview.findViewById(R.id.alarmeText);
                ImageView img = (ImageView)rowview.findViewById(R.id.img);
     
                Note n=notes.get(position);
                if(n.getDate()!=null)
                {
                    alarme.setText("Alarme :"+n.afficheDate());
                }
     
                titre.setText(n.getTitre());
                desc.setText(n.getDescription());
     
                img.setImageResource(images[notes.get(position).getImportance()-1]);
     
              return rowview;
            }
     
        public void remove(Note note)
        {
     
            for(Note n : notes){
                if(n.getDescription().equals(note.getDescription())){
                    notes.remove(n);
                }
            }
        }
     
     
        @Override
        public void sort(Comparator comparator) {
            super.sort(comparator);
            notifyDataSetChanged();
        }
     
        @Override
        public int getCount() {
            return notes.size();
        }
     
        @Override
        public Note getItem(int position) {
            return notes.get(position);
        }
     
        @Override
        public long getItemId(int position) {
            return notes.indexOf(getItem(position));
        }
     
     
    }
    Et enfin l'énumeration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public enum SortType {
        AlphaTitre,
        AlphaDesc,
        DateAlarme,
        DateCreation,
        Importance
     
    }


    Merci d'avance pour votre aide , je bloque vraiment...

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Si tu tries bien l'instance dont l'adapter se sert, il te manque un p'tit adapter.notifyDataSetChanged(); après ton sort.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Membre éclairé Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Par défaut
    Merci de ta réponse.

    Le notifyDataSetChanged() ne suffit pas dans la méthode sort de l'adapter ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        @Override
        public void sort(Comparator comparator) {
            super.sort(comparator);
            notifyDataSetChanged();
        }

  4. #4
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Je l'avais raté celui-là.

    De ce que je lis de la documentation ArrayAdapter#sort réalise de lui-même un notifyDataSetChanged, donc pas la peine de le faire en prime.
    Par contre, je ne saisi pas la raison pour laquelle tu redéfinis le sort. Essaie sans ?
    Est-ce que ton modèle est bien triée après sélection ?
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  5. #5
    Membre éclairé Avatar de Neolex
    Homme Profil pro
    Recherche emploi Securité informatique
    Inscrit en
    Avril 2011
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Recherche emploi Securité informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 243
    Par défaut
    Merci de ta réponse .
    j'ai essayé de la retirer c'est pareil... J'ai pas l'impression qu'il est trié après sélection non...

    Edit : j'ai réussi en créant une nouvelle méthode sort dans mon Adapter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        public void sort(SortType type){
            Collections.sort(notes,new MonComparator(type));
            this.notifyDataSetChanged();
        }
    Merci pour votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tri alphabetique dans une representation intervallaire
    Par bomber dans le forum Langage SQL
    Réponses: 10
    Dernier message: 18/10/2007, 16h31
  2. Réponses: 8
    Dernier message: 12/05/2006, 14h04
  3. [VBA-E]tri/sélection dans une feuille
    Par philpommé dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/04/2006, 20h18
  4. [VC++6][MFC]Tri alphabétique dans CEdit
    Par ben_popcorn dans le forum MFC
    Réponses: 5
    Dernier message: 03/10/2005, 09h39
  5. tri alphabétique dans un tableau deux dimensions
    Par *!!cocco!!* dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 06/12/2004, 21h38

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