checkbox dans une listView
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
Code:
1 2 3 4 5 6
| public class MainActivity extends AppCompatActivity {
private ListView lstPersonnes;
private ArrayAdapter<Personne> adpPersonne;
private CheckBox chkSportif;
[...] |
J'initialise cette calsse
Code:
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);
[...]
} |
Et j'écoute afin d'avoir le retour de la saisie et mettre à jour ma listeview
Code:
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();
}
}
} |
Tout cela marche, mais je ne vois pas comment mettre mes checkbox dans ma liste.
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 :
Code:
1 2 3 4
| @Override
public String toString() {
return this.Nom + " " + this.Prenom + " ("+ this.Age+" ans)" ;
} |
J'ai bien essayé d'ajouter juste après mon (adpPersonne.add(p)
Code:
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); |
Mais quand j'aoute une seconde ligne, je perd ma case à cochée et elle redevient comme avant.
Qui pourrait m'aider ?
merci
yoyochon