Bonjour,
je fais des ex6 pour apprendre à utiliser la LISTVIEW et afficher via ActivityResult et onActivityResult ce qui est saisie sur une autre interface.
Dans mon activity qui affiche le retour de saisie, je dois mettre a jour ma liste sur écran en affichant les données saisir dans une classe (ce qui se passe très bien) mais mettre en face de chaque nom une checkbox disant si oui ou non cette personne est sportive.
Je déclare mon MainActivity
J'initialise cette calsse
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public class MainActivity extends AppCompatActivity { private ListView lstPersonnes; private ArrayAdapter<Personne> adpPersonne; private CheckBox chkSportif; [...]
Et j'écoute afin d'avoir le retour de la saisie et mettre à jour ma listeview
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 [...] private void init() { // Init des valeurs lstPersonnes = (ListView) findViewById(R.id.lstPersonnes); // ma listeview dans mon layour chkSportif = findViewById(R.id.chkSportif); // mon CHECKBOX dans mon layout adpPersonne = new ArrayAdapter<Personne>(this, android.R.layout.simple_list_item_checked); // j'associe mon adapter avec ma liste lstPersonnes.setAdapter(adpPersonne); [...] }
Tout cela marche, mais je ne vois pas comment mettre mes checkbox 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 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == NOUVEAU) { if (resultCode == RESULT_OK) { String nom = data.getStringExtra("nom"); String prenom = data.getStringExtra("prenom"); int age = data.getIntExtra("age", 0); Boolean sportif = data.getBooleanExtra("sportif", false); Personne p = new Personne(nom, prenom, age, sportif); adpPersonne.add(p); } else { Toast.makeText(this, "L'utilisateur a annulé!", Toast.LENGTH_LONG).show(); } } }
Si je comprend bien, il cela met mes donnés en ligne avec ma classe Personne (public class Personne implements Serializable {...]) ou j'ai dedans :
J'ai bien essayé d'ajouter juste après mon (adpPersonne.add(p)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 @Override public String toString() { return this.Nom + " " + this.Prenom + " ("+ this.Age+" ans)" ; }
Mais quand j'aoute une seconde ligne, je perd ma case à cochée et elle redevient comme avant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 // Position lors de l'ajout int position = adpPersonne.getPosition(p); // Test si mon objet p est sportif Boolean temp = false; if (p.isSportif()) temp = true; // Check si oui lstPersonnes.setItemChecked(position,temp);
Qui pourrait m'aider ?
merci
yoyochon
Partager