2010-09-26 18 views
0

Je rencontre des problèmes avec ExpandableListView. Ce que je veux, c'est que chaque groupe soit de la colonne "bond", ce qui n'est pas unique, mais je veux que les groupes soient uniques (c'est-à-dire que chaque valeur de "bond" ne devrait avoir qu'un seul groupe). Chaque valeur du groupe contient des données dans d'autres colonnes qui doivent être affichées. Le problème est qu'il semble que je peux soit utiliser l'opérateur SQL DISTINCT avec une colonne (et ensuite getChildrenCursor() lance une exception IllegalStateException), soit ne pas utiliser l'opérateur DISTINCT et avoir chaque groupe dupliqué.Valeurs distinctes dans Android ExpandableListView

Quelqu'un peut-il suggérer une solution pour cela?

public void onCreate(Bundle saved) { 

    super.onCreate(saved); 

    DatabaseHelper dh = new DatabaseHelper(this); 
    dh.openDataBase(); 
    db = dh.getReadableDatabase(); 

    String query = "SELECT DISTINCT bond FROM spectro"; 

    Cursor c = db.rawQuery(query, null); //throws exception when group opened 
    //Cursor c = db.query("spectro", new String[] { "_id", "name", "bond", ir }, 
     //null, null, null, null, null) - gives duplicate groups 

    ExpandableListAdapter a = new IRCursorAdapter (this, 
      c, android.R.layout.simple_expandable_list_item_1, new String[] { "bond" }, 
      new int[] { android.R.id.text1 }, R.layout.row_doubleend, 
      new String[] { "name", "ir" }, new int[] { R.id.double_item1, R.id.double_item2 }); 

    this.setListAdapter(a); 


} 

protected class IRCursorAdapter extends SimpleCursorTreeAdapter { 

    public IRCursorAdapter(Context context, Cursor cursor, int groupLayout, 
      String[] groupFrom, int[] groupTo, int childLayout, 
      String[] childFrom, int[] childTo) { 
     super(context, cursor, groupLayout, groupFrom, groupTo, childLayout, childFrom, 
       childTo); 
    } 

    @Override 
    protected Cursor getChildrenCursor(Cursor groupCursor) { 

     Cursor c = db.query("spectro", new String[] {"_id", "name", "bond", "ir"}, 
       "bond=?", new String[] { groupCursor.getString(0) }, null, null, null); 

     startManagingCursor(c); 
     return c; 
    } 


}; 

voici ce que ma table regarde comme- le lien est ce que je veux être unique:

_id | nom | lien | ir
1 | nom 1 | lien 1 | ir 1
2 | nom 2 | lien 1 | ir 2
3 | nom 3 | lien 2 | ir 3
4 | nom 4 | lien 3 | ir 4

désolé si ce n'est pas particulièrement clair, mais merci pour votre aide!

Répondre

0

Je pense que vous utilisez mal l'opérateur distinct. IT retournera seulement Bond1, Bond2, Bond3 et c'est tout. Vous devez créer une instruction de jointure composée pour produire le curseur correct. Ce que vous avez là jettera toujours une erreur parce que vous n'avez pas spécifié les enfants correctement. Deuxièmement, je voudrais utiliser la requête (au lieu de la requête brute) et spécifier les paramètres là.

E.g. db.query (true, "spectro", nouvelle chaîne [] {"bond"}, null, null, ...)

Vous devrez également vous assurer que vous avez vos paramètres Group From -> To et Enfants de -> aux paramètres corrects!

+0

yup, utilisé le groupe sur la requête et fonctionne parfaitement –