Aller au contenu

Accéder à une custom row dans une ListView


Guilo

Recommended Posts

Bonjour,

J'ai suivi le 1er exercice Notepad du tutorial officiel Android. J'ai décidé de l'agrémenter un peu car c'est en essayant qu'on apprend.

Je veux donc avoir deux lignes dans ma ListView, une en gros et une écrite plus petit.

J'ai donc modifié mon fichier notepad_rows.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="wrap_content"
   android:layout_height="wrap_content">


<TextView android:id="@+id/text1"
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="wrap_content"
   android:textSize="20sp"
   android:layout_height="60sp"/>

   <TextView android:id="@+id/text2"
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="wrap_content"
    android:textSize="12sp"
   android:layout_height="wrap_content"/>



   </LinearLayout>

Ma ListView est alimentée par un SimpleCursorAdapter, comme dans le tutorial. Maintenant je veux ajouter à la deuxieme ligne de chaque element du texte arbitraire. J'essaye donc d'accéder aux elements avec getChildAt() mais rien n'est jamais retourné et getChildCount retourne 0. Je me dis (corrigez moi si je me trompe) : OK c'est normal, c'est parce que la liste est gérée par le SimpleCursorAdapter. J'essaye donc d'utiliser la méthode bindView() de SimpleCursorAdapter mais je n'arrive à rien. Donc pour résumer :

- Quelle méthode simple y a t-il pour ajouter manuellement des éléments à une liste, est-ce possible sans un quelconque adaptateur ?

- Comment accéder à mon TextView qui se nomme text2 pour y faire un setText ?

Merci

Lien vers le commentaire
Partager sur d’autres sites

Si la donnée à afficher dans le second TextView provient du Cursor de la même façon que pour le premier TextView, c'est très simple, ça se paramètre au niveau du constructeur de SimpleCursorAdapter

SimpleCursorAdapter adapter = new SimpleCursorAdapter(context, R.layout.notepad_rows, cursor, new String[]{"nom_colonne1", "nom_colonne2"}, new int[]{R.id.text1, R.id.text2});

Sinon, il faudra plutôt passer par le bindView.

Et tu as bien compris: la liste est représentée par l'Adapter (c'est lui qui contient les données), pas par la ListView, qui, elle, n'est qu'une représentation graphique (partielle) de cette liste

Lien vers le commentaire
Partager sur d’autres sites

Merci. Effectivement, les donnés pour la seconde ligne ne proviennent pas du cursor. Je vais donc me pencher sur bindView.

ÉDIT : j'ai avancé un peu. J'ai crée une classe héritée de SimpleCursorAdapter et redéfini la méthode getView. Ça marche, la première ligne affiche des données en provenance du curseur et la deuxième affiche bien ce que je veux. Le problème est que quand j'ajoute une note, ça crash. De plus il y a un problème de données. Certaines lignes sont répétées, d'autres n'apparaissent pas du tout. Et cela change quand les lignes sortent de la vue et y reviennent quand je scroll

Message envoyé avec l'application Forum Frandroid

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...