jok Posté(e) 16 février 2011 Share Posté(e) 16 février 2011 Bonjour, J'ai un soucis de récupération de données et j'aurais besoin de votre aide. Tout d'abord, je parcours ma table T_Personnes (de ma base SQLite) et j'affiche le nom et le prénom de chaque personne dans une listview. Jusque là ça va, mais j'aimerais qu'en tapotant sur le nom d'une personne, j'affiche toutes ses informations (à savoir son nom et son prénom mais aussi son ID, son sexe, etc.) dans une Alert. Pour l'instant, j'arrive bien à récupérer le nom et le prénom mais pas par la bonne méthode : je fais récupère en fait le texte de la listview et non les infos de la table parcourue... Y a-t-il une possibilité pour avoir ses informations ? En vous remerciant d'avance, je laisse mon code à la suite pour les courageux. // Parcours de la table T_Personnes public ArrayList<String> getPersonnes() { ArrayList<String> output = new ArrayList<String>(); String[] colonnes = new String[] { "IDbenef", "Nom", "Prénom", "Sexe" }; Cursor cursorResults = bdd.query(PERSONNES, colonnes, null, null, null, null, "Nom ASC, 'Prénom' ASC", null); if (null != cursorResults) { if (cursorResults.moveToFirst()) { do { int colnom = cursorResults.getColumnIndex("Nom"); int colprenom = cursorResults.getColumnIndex("Prénom"); String nomPrenom = cursorResults.getString(colnom) + " " + cursorResults.getString(colprenom); output.add(nomPrenom); } while (cursorResults.moveToNext()); } } return output; } // Affichage dans le listview BaseSQLite bddConn = new BaseSQLite(this); // Adapter qui liste les personnes ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, bddConn.getPersonnes()); setListAdapter(adapter); // Récupère le contenu de la personne sélectionnée pour afficher ses informations ListView liste = getListView(); liste.setTextFilterEnabled(true); liste.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { AlertDialog.Builder alert = new AlertDialog.Builder(L_Personnes.this); // Je mets le titre de l'alert avec le nom de la personne alert.setTitle(((TextView) view).getText()); // J'aimerais placer ici les informations de la personne alert.setMessage("?"); alert.setPositiveButton("Retour", null); alert.show(); } }); Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 16 février 2011 Share Posté(e) 16 février 2011 Tu peux peut être réouvrir ta BDD et faire un query en passant comme paramètre l'id qui t'est donné dans la méthode OnItemClick. Pour ça, tu dois avoir créé dans ta classe BaseSQLite une méthode du genre: public Cursor getPersonne(String rowId) throws SQLException { Cursor mCursor = mDb.query(false, DATABASE_TABLE, null, KEY_ROWID + "=" + "'"+rowId+"'", null, null, null, null, null); if (mCursor != null) { mCursor.moveToFirst(); } return mCursor; } (Regarde la doc de la méthode "query" pour spécifier les colonnes que tu veux récupérer ... ) Du coup ton code devient: liste.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { AlertDialog.Builder alert = new AlertDialog.Builder(L_Personnes.this); // En supposant que tu n'as pas fermé ta BDD: Cursor laPersonne = bddConn.getPersonne(id); String sonPrenom = laPersonne.getString(laPersonne.getColumnIndexOrThrow("Prénom")); String sonNom = laPersonne.getString(laPersonne.getColumnIndexOrThrow("Nom")); String sonSexe = laPersonne.getString(laPersonne.getColumnIndexOrThrow("Sexe")); laPersonne.close(); // Je mets le titre de l'alert avec le nom de la personne alert.setTitle(((TextView) view).getText()); // J'aimerais placer ici les informations de la personne alert.setMessage("Nom: " + sonNom + " Prénom: " + sonPrenom + " Sexe: " + sonSexe); alert.setPositiveButton("Retour", null); alert.show(); } }); J'ai pas testé, mais en gros c'est ça l'idée. J'espère avoir pu t'aider. Lien vers le commentaire Partager sur d’autres sites More sharing options...
jok Posté(e) 16 février 2011 Auteur Share Posté(e) 16 février 2011 Pourquoi préférer une méthode getPersonne() de type Cursor et non de type ArrayList<String> ? En tout cas un grand merci pour ta réponse rapide, c'est pile ce que je cherchais ! :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 16 février 2011 Share Posté(e) 16 février 2011 Après tu fais comme tu veux, mais c'est une méthode générique qui peut te servir dans le reste de ton application. Lien vers le commentaire Partager sur d’autres sites More sharing options...
jok Posté(e) 17 février 2011 Auteur Share Posté(e) 17 février 2011 D'accord merci ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.