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 :

Trier par odre alphabetique


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2015
    Messages : 8
    Par défaut Trier par odre alphabetique
    Salut à tous,
    Et d'abord merci à tous les participants de ce forum pour toutes les infos que l'on peut y trouver.

    Voilà mon problème...Je tente de créer un bouton TRIER (bouton 4) mais je ne comprend pas vers quelle méthode il faut que je me dirige.
    J'ai une base de données SQLite qui charge une listview par l'intermediaire d'un adapter dans mon application et des boutons ajouter, nouveau, supprimer et le fameux TRIER. Mais pour ce dernier je suis perdu.

    Pouvez vous m'aider pour arriver à trier ma liste par ordre alphabétique au niveau des point d'interrogations...

    Je ne sais pas si je suis très claire n'hésitez pas à me demander des éclaircissements

    Class qui gère mes boutons:
    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
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
     
    import android.app.ListActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.Toast;
    import java.util.Comparator;
    import java.util.List;
     
    public class ListeLegumes extends ListActivity implements OnClickListener {
     
        // affichage
        private Button addBouton;
        private Button newBouton;
        private Button deleteBouton;
        private Button trierBouton;
        EditText editText;
        // adapter
        private ArrayAdapter<Personne> myAdapter;
        // bdd
        private PersonneDataSource datasource;
        // personneselected
        Personne personneSelected = null;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_liste_legumes);
     
            // ouverture d'une connexion avec la bdd
            datasource = new PersonneDataSource(this);
            datasource.open();
     
     
            // nos boutons
            addBouton = (Button) findViewById(R.id.button1);
            addBouton.setOnClickListener(this);
     
            newBouton = (Button) findViewById(R.id.button2);
            newBouton.setOnClickListener(this);
            newBouton.setEnabled(false);
     
            deleteBouton = (Button) findViewById(R.id.button3);
            deleteBouton.setOnClickListener(this);
            deleteBouton.setEnabled(false);
     
            trierBouton = (Button) findViewById(R.id.button4);
            trierBouton.setOnClickListener(this);
     
            // notre champ de saisie
            editText = (EditText) findViewById(R.id.editText1);
     
            // on récupère les personnes
            List<Personne> listValues = datasource.getAllPersonnes();
     
            // on créé un adapter
            myAdapter = new ArrayAdapter<Personne>(this, R.layout.row_layout,
                    R.id.listText, listValues);
     
            // assign the list adapter
            setListAdapter(myAdapter);
        }
     
        @Override
        public void onClick(View v) {
            if (v.getId() == R.id.button1) {
                if (editText.getText().length() > 0) {
                    if (personneSelected != null) {
                        // UPDATE
                        personneSelected.setNom(editText.getText().toString());
                        datasource.updatePersonne(personneSelected);
                    } else {
                        // CREATE
                        myAdapter.add(datasource.createPersonne(editText.getText()
                                .toString()));
                        editText.setText("");
                    }
                    myAdapter.notifyDataSetChanged();
                } else {
                    Toast toast = Toast.makeText(this, "Pas de nom!",
                            Toast.LENGTH_SHORT);
                    toast.show();
                }
     
            }
            if (v.getId() == R.id.button2) {
                personneSelected = null;
                editText.setText("");
                addBouton.setText("Ajouter");
            }
     
            if (v.getId() == R.id.button3) {
                if (personneSelected != null) {
                    editText.setText("");
                    addBouton.setText("Ajouter");
                    datasource.deletePersonne(personneSelected);
                    myAdapter.remove(personneSelected);
                    myAdapter.notifyDataSetChanged();
                    personneSelected = null;
                }
            }
     
            if (v.getId() == R.id.button4){
    ????
    ???
    ???
    ?
    ???
    ?
    ???
    ????
    ????
    ???
    ????
    ????
    ???
    ???
     
            }
        }
     
     
     
        @Override
        protected void onListItemClick(ListView list, View view, int position,
                                       long id) {
            super.onListItemClick(list, view, position, id);
     
            personneSelected = (Personne) getListView().getItemAtPosition(position);
     
            editText.setText(personneSelected.getNom());
     
            addBouton.setText("Modifier");
            newBouton.setEnabled(true);
            deleteBouton.setEnabled(true);
     
        }
     
        @Override
        protected void onResume() {
            datasource.open();
            super.onResume();
        }
     
        @Override
        protected void onPause() {
            datasource.close();
            super.onPause();
        }
     
    }

    Ma sqLite:
    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
     
     
    /**
     * Created by CEDRIC on 01/10/2015.
     */
     
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
     
     
     
    public class MySQLiteHelper extends SQLiteOpenHelper {
     
        public static final String TABLE_PERSONNES = "personnes";
        public static final String COLUMN_ID = "_id";
        public static final String COLUMN_NAME = "name";
        private static final String DATABASE_NAME = "personnes.db";
        private static final int DATABASE_VERSION = 2;
     
     
        // Database creation sql statement
        public String DATABASE_CREATE =
                "create table " + TABLE_PERSONNES + "("
                + COLUMN_ID + " integer primary key autoincrement, "
                + COLUMN_NAME + " text not null);";
     
        public MySQLiteHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
     
        @Override
        public void onCreate(SQLiteDatabase db) {
     
            db.execSQL(DATABASE_CREATE);
     
            ContentValues cv = new ContentValues(1);
            cv.put(COLUMN_NAME, "Salade");
            db.insert(TABLE_PERSONNES, null, cv);
     
        }
     
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS " + TABLE_PERSONNES);
            onCreate(db);
            db.query("personnes", new String[]{"name"}, null, null, null, null,
                    "name DESC", null);
        }
     
    }
    Ma class PersonneDataSource
    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
     
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.SQLException;
    import android.database.sqlite.SQLiteDatabase;
     
    import java.util.ArrayList;
    import java.util.List;
     
    public class PersonneDataSource {
     
        // Database fields
        private SQLiteDatabase database;
        private MySQLiteHelper dbHelper;
        private String[] allColumns = { MySQLiteHelper.COLUMN_ID,
                MySQLiteHelper.COLUMN_NAME };
     
        public PersonneDataSource(Context context) {
            dbHelper = new MySQLiteHelper(context);
        }
     
        public void open() throws SQLException {
            database = dbHelper.getWritableDatabase();
        }
     
        public void close() {
            dbHelper.close();
        }
     
        public Personne createPersonne(String name) {
            ContentValues values = new ContentValues();
            values.put(MySQLiteHelper.COLUMN_NAME, name);
            long insertId = database.insert(MySQLiteHelper.TABLE_PERSONNES, null,
                    values);
            Cursor cursor = database.query(MySQLiteHelper.TABLE_PERSONNES,
                    allColumns, MySQLiteHelper.COLUMN_ID + " = " + insertId, null,
                    null, null, null);
            cursor.moveToFirst();
            Personne newPersonne = cursorToPersonne(cursor);
            cursor.close();
                    return newPersonne;
        }
     
        public void updatePersonne(Personne personne){
            ContentValues values = new ContentValues();
            values.put(MySQLiteHelper.COLUMN_NAME, personne.getNom());
     
            database.update(MySQLiteHelper.TABLE_PERSONNES, values,
                    MySQLiteHelper.COLUMN_ID + " = ? ",
                    new String[]{String.valueOf(personne.getId())});
     
        }
     
        public void deletePersonne(Personne personne) {
            long id = personne.getId();
            database.delete(MySQLiteHelper.TABLE_PERSONNES,
                    MySQLiteHelper.COLUMN_ID + " = " + id, null);
        }
     
        public List<Personne> getAllPersonnes() {
            List<Personne> personnes = new ArrayList<Personne>();
     
            Cursor cursor = database.query(MySQLiteHelper.TABLE_PERSONNES,
                    allColumns, null, null, null, null, null);
     
            cursor.moveToFirst();
            while (!cursor.isAfterLast()) {
                Personne personne = cursorToPersonne(cursor);
                personnes.add(personne);
                cursor.moveToNext();
            }
            // make sure to close the cursor
            cursor.close();
            return personnes;
        }
     
        private Personne cursorToPersonne(Cursor cursor) {
            Personne personne = new Personne();
            personne.setId(cursor.getLong(0));
            personne.setNom(cursor.getString(1));
            return personne;
        }
     
    }

  2. #2
    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
    Je n'ai pas regardé en détail le code.... mais...

    1. Si l'adapter est à base de cursor (CursorAdapter) ce qui est recommandé pour la liste de trucs en DB (potentiellement grosse).
    * Reconstruire le cursor avec un "order by" sur la DB, repasser le cursor à l'adapter.

    2. Si l'adapter est à base de liste issue de la DB.
    * Reconstruire la liste en demandant à la DB de trier les noms.
    * Trier la liste soi-même (la fonction "Collections.sort" peut aider).

  3. #3
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2015
    Messages : 8
    Par défaut
    Euhhh ... je ne comprends pas tout ...
    Je l'ai créé de cette manière. ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      // on récupère les personnes
            List<Personne> listValues = datasource.getAllPersonnes();
     
            // on créé un adapter
            myAdapter = new ArrayAdapter<Personne>(this, R.layout.row_layout,
                    R.id.listText, listValues)

  4. #4
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Tu es dans le cas n°2 évoque par Nicroman. Par conséquent :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class PersonneCompare implements Comparator<Personne> {
     
        @Override
        public int compare(Personne o1, Personne o2) {
            return o1.getNom().compareTo(o2.getNom());
        }
    }

    Puis, simplement :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    List<Personne> listValues = datasource.getAllPersonnes();
    Collections.sort(listValues, new PersonneCompare());  //tri de la liste
    myAdapter = new ArrayAdapter<Personne>(this, R.layout.row_layout, R.id.listText, listValues)
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  5. #5
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2015
    Messages : 8
    Par défaut
    Ok .... merci pour vos réponses rapide ... je vais essayer ça ...

  6. #6
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mars 2015
    Messages : 8
    Par défaut
    Bon je n'arrive pas a me dépatouiller j'ai fais ça (voir le code ci dessous vers la fin), mais cela ne marche pas.
    Le bouton 4 TRIER ne fonctionne pas et lorsque j'ajoute une entrée dans ma liste avec le bouton 1 ma liste ne se rafraîchit plus dynamiquement. Je suis obligé de sortir et de revenir pour voir ma nouvelle entrée dans ma liste.

    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
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
     
    import android.app.ListActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.Toast;
     
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
     
    public class ListeLegumes extends ListActivity implements OnClickListener {
     
        // affichage
        private Button addBouton;
        private Button newBouton;
        private Button deleteBouton;
        private Button trierBouton;
        EditText editText;
        // adapter
        private ArrayAdapter<Personne> myAdapter;
        // bdd
        private PersonneDataSource datasource;
        // personneselected
        Personne personneSelected = null;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_liste_legumes);
     
            // ouverture d'une connexion avec la bdd
            datasource = new PersonneDataSource(this);
            datasource.open();
     
     
            // nos boutons
            addBouton = (Button) findViewById(R.id.button1);
            addBouton.setOnClickListener(this);
     
            newBouton = (Button) findViewById(R.id.button2);
            newBouton.setOnClickListener(this);
            newBouton.setEnabled(false);
     
            deleteBouton = (Button) findViewById(R.id.button3);
            deleteBouton.setOnClickListener(this);
            deleteBouton.setEnabled(false);
     
            trierBouton = (Button) findViewById(R.id.button4);
            trierBouton.setOnClickListener(this);
     
            // notre champ de saisie
            editText = (EditText) findViewById(R.id.editText1);
     
            // on récupère les personnes
            List<Personne> listValues = datasource.getAllPersonnes();
     
            // on créé un adapter
            myAdapter = new ArrayAdapter<Personne>(this, R.layout.row_layout,
                    R.id.listText, listValues);
     
            // assign the list adapter
            setListAdapter(myAdapter);
        }
     
        @Override
        public void onClick(View v) {
            if (v.getId() == R.id.button1) {
                if (editText.getText().length() > 0) {
                    if (personneSelected != null) {
                        // UPDATE
                        personneSelected.setNom(editText.getText().toString());
                        datasource.updatePersonne(personneSelected);
                    } else {
                        // CREATE
                        myAdapter.add(datasource.createPersonne(editText.getText()
                                .toString()));
                        editText.setText("");
                    }
                    myAdapter.notifyDataSetChanged();
                } else {
                    Toast toast = Toast.makeText(this, "Pas de nom!",
                            Toast.LENGTH_SHORT);
                    toast.show();
                }
     
            }
            if (v.getId() == R.id.button2) {
                personneSelected = null;
                editText.setText("");
                addBouton.setText("Ajouter");
            }
     
            if (v.getId() == R.id.button3) {
                if (personneSelected != null) {
                    editText.setText("");
                    addBouton.setText("Ajouter");
                    datasource.deletePersonne(personneSelected);
                    myAdapter.remove(personneSelected);
                    myAdapter.notifyDataSetChanged();
                    personneSelected = null;
                }
            }
     
            if (v.getId() == R.id.button4){
                List<Personne> listValues = datasource.getAllPersonnes();
     
                class PersonneCompare implements Comparator<Personne> {
     
                    @Override
                    public int compare(Personne o1, Personne o2) {
                        return o1.getNom().compareTo(o2.getNom());
                    }
                }
                Collections.sort(listValues, new PersonneCompare());  //tri de la liste
                myAdapter = new ArrayAdapter<Personne>(this, R.layout.row_layout, R.id.listText, listValues);
                myAdapter.notifyDataSetChanged();
            }
        }
     
     
     
        @Override
        protected void onListItemClick(ListView list, View view, int position,
                                       long id) {
            super.onListItemClick(list, view, position, id);
     
            personneSelected = (Personne) getListView().getItemAtPosition(position);
     
            editText.setText(personneSelected.getNom());
     
            addBouton.setText("Modifier");
            newBouton.setEnabled(true);
            deleteBouton.setEnabled(true);
     
        }
     
        @Override
        protected void onResume() {
            datasource.open();
            super.onResume();
        }
     
        @Override
        protected void onPause() {
            datasource.close();
            super.onPause();
        }
     
    }

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

Discussions similaires

  1. trier par ordre alphabetique le contenu d'une liste deroulante DropDownList
    Par mimijesss dans le forum Développement Sharepoint
    Réponses: 3
    Dernier message: 23/05/2011, 15h29
  2. LATEX : trier les acronymes par ordre alphabetique
    Par mirabf dans le forum Mise en forme
    Réponses: 1
    Dernier message: 07/12/2009, 19h26
  3. trier par ordre alphabetique un tableau de char
    Par Pitou5464 dans le forum C
    Réponses: 3
    Dernier message: 02/11/2006, 18h44
  4. trii par odre alphabetique dans un arbre
    Par matt92700 dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 13/01/2005, 22h16

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