Bonjour tout l'monde !
Je viens parmis vous avec le probleme suivant, j'essaie de créer une frame depuis laquelle on peut ajouter à l'aide d'un bouton de nouvelles vues contenant un radiogroup composé de plusieurs radiobuttons..
Le soucis est qu'avec mon code, je me retrouve avec des comportement non désirés, par exemple :
Lorsque j'ajoute plusieurs row, si la premiere je coche un des rabiobuttons, que je scrool en bas et qu'ensuite je scroll en haut de mon écran pour allez revoir ma premiere row...Mon radionbutton est décoché (donc soucis de recyclage de vue, alors que j'ai forcé la sauvegarde des données dans mon code)
Et lorsque je coche un radiobutton et que j'ajoute de novuelles rows via le boutton dont j'ai parlé plus hat, à ce moment là certains radiobutton se cochent automatiquement.
Voici mon code, pourriez vous me dire où se trouve mon erreur ?
Un bout de mon frame :
Les données de l'objet représenté dans une row :
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
17 final ViewGroup root = (ViewGroup) inflater.inflate( R.layout.slide_cavite, null); listview_cavite = (ListView) root.findViewById(R.id.listview_cavite); // Arbre.table_cavite.open(); adaptor = new Adaptor_cavite_item(root.getContext(), R.layout.slide_item_cavite, Arbre.liste_cavite); listview_cavite.setAdapter(adaptor); ajouter_cavite = (Button) root.findViewById(R.id.ajouter_cavite); ajouter_cavite.setOnClickListener(new OnClickListener() { public void onClick(View v) { //Arbre.liste_cavite.add(new Donnees_cavite()); adaptor.add(new Donnees_cavite(root.getContext())); adaptor.notifyDataSetChanged(); } });
et enfin mon arrayadapter perso :
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
17
18
19
20 public class Donnees_cavite { int rb_excrement_checked; public int get_rb_excrement_checked() { return rb_excrement_checked; } public void setFirstChecked(int firstChecked) { this.rb_excrement_checked = firstChecked; } public Donnees_cavite(Context context){ this.rb_excrement_checked = -1; } }
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 public class Adaptor_cavite_item extends ArrayAdapter<Donnees_cavite> { int layoutResourceId; Holder holder; ArrayList<Donnees_cavite> liste; private LayoutInflater mInflater; ... @Override public View getView(final int position, View convertView, ViewGroup parent) { View row = convertView; if (row == null) { row = mInflater.inflate(R.layout.slide_item_cavite, null); holder = new Holder(); holder.excrement = (RadioGroup) row.findViewById(R.id.slide_cavite_excrement); holder.excrement_1 = (RadioButton) row.findViewById(R.id.slide_cavite_excrement_rb1); holder.excrement_2 = (RadioButton) row.findViewById(R.id.slide_cavite_excrement_rb2); row.setTag(this.holder); }else{ this.holder = (Holder) row.getTag(); } holder.excrement.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup arg0, int arg1) { // TODO Auto-generated method stub switch (arg1) { case R.id.slide_cavite_excrement_rb1: liste.get(position).setFirstChecked(1); break; case R.id.slide_cavite_excrement_rb2: liste.get(position).setFirstChecked(2); break; } } }); if (liste.get(position).get_rb_excrement_checked() == 1){ holder.excrement_1.setChecked(true); holder.excrement_2.setChecked(false); }else if (liste.get(position).get_rb_excrement_checked() == 2){ holder.excrement_1.setChecked(false); holder.excrement_2.setChecked(true); }else{ holder.excrement_1.setChecked(false); holder.excrement_2.setChecked(false); } return row; } static class Holder { RadioGroup excrement; RadioButton excrement_1,excrement_2; } } }
Le pire, c'est que si je remplace ce bout de code à la fin de mon arrayadapter :
par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 if (liste.get(position).get_rb_excrement_checked() == 1){ holder.excrement_1.setChecked(true); holder.excrement_2.setChecked(false); }else if (liste.get(position).get_rb_excrement_checked() == 2){ holder.excrement_1.setChecked(false); holder.excrement_2.setChecked(true); }else{ holder.excrement_1.setChecked(false); holder.excrement_2.setChecked(false); }
Plus aucun comportement non désirable ! tout fonctionne nickel.. Déjà, je ne comprend pas pourquoi le code initial provoque mes "bugs" ^^ et ensuite, bah ce code marche..mais ça m'arrange pas car je dois avoir plusieurs radiobutton (>2) par row ^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 if (liste.get(position).get_rb_excrement_checked() == 1){ holder.excrement_1.setChecked(true); holder.excrement_2.setChecked(false); }else{ holder.excrement_1.setChecked(false); holder.excrement_2.setChecked(true); }
Merci pour votre aide !
Partager