2010-10-27 7 views
3

J'ai une liste que je remplis avec des données à partir d'une base de données, et maintenant je veux trier ces données par titre et par date. Im nouveau à la programmation pour Android, donc je n'arrive pas à comprendre comment faire ici, j'espère que quelqu'un peut vous aider.Android - Comment trier la liste

Voici comment la liste est remplie:

public void fillData() 
{ 
    // get all the data from database 
    DBAdapter db = new DBAdapter(this); 
    db.open(); 

    mCategoriesCursor = db.getAllTitles(); 
     startManagingCursor(mCategoriesCursor); 

    String[] from = new String[] { DBAdapter.KEY_TITLE, DBAdapter.KEY_DATE }; 
    int[] to = new int[] { R.id.text1, R.id.text2 }; 

    // Now create an array adapter and set it to display using our row 
    SimpleCursorAdapter categories = 
     new SimpleCursorAdapter(this, R.layout.categories_row, mCategoriesCursor, from, to); 
    setListAdapter(categories); 

    db.close(); 
}  

Voici le sql:

//---retrieves all the categories--- 
public Cursor getAllTitles() 
{ 
    return db.query(DATABASE_TABLE, new String[] { 
      KEY_ROWID, 
      KEY_TITLE, 
      KEY_DATE, 
      KEY_EXTRA}, 
      null, 
      null, 
      null, 
      null, 
      null); 
} 
+0

Le sujet de votre question n'a rien à voir avec la question elle-même. – EboMike

+0

Il n'y a pas d'instruction if dans ce code – Falmarri

+0

Someting étrange arrivé ici ... mauvais titre .. changé .. Le problème n'a rien à voir avec "si" .. Le problème est expliqué dans le texte. – user484146

Répondre

2

La meilleure façon serait de trier les données que vous les obtenez de votre base de données. Cela se fait lorsque vous créez le curseur (qui ne fait pas partie du code que vous avez publié). Lorsque vous interrogez une base de données, vous pouvez spécifier l'ordre de tri.

+0

Oui, ça a bien fonctionné. Donc je regardais au mauvais endroit hehe. Cela a fonctionné parfaitement. Ce que j'ai fait était de changer le dernier "null" dans la requête dans "public Cursor getAllTitles()" à KEY_TITLE ou KEY_DATA pour trier. – user484146

+0

Le tri du côté client impliquera moins de travail pour votre serveur. – BajaBob

+0

Ceci est Android. Le client est le serveur. – EboMike

1

Vous devriez probablement faire le tri lorsque vous appelez les données de la base de données elle-même. Pour ce faire, vous devez remplir le paramètre Sort de la méthode de requête que vous utilisez pour extraire ces données.

Il devrait aller quelque chose comme ceci:

String sortStr = DBAdapter.KEY_TITLE + "asc, " + DBAdapter.KEY_DATE + " asc"; 

(cette chaîne de tri vous mettriez dans la méthode de requête que le dernier paramètre)

Si vous faites cela comme une requête brute que vous » d ajouter une commande complète par une déclaration à la fin de votre requête. Si vous voulez plus de détails, vous devrez nous montrer le fonctionnement interne de votre DBAdapter (plus précisément le getAllTitles method).