Djizou Posté(e) 17 juin 2011 Share Posté(e) 17 juin 2011 Bonjour à tous. Je suis confronté à un problème vicieux depuis 2 jours, je ne trouve pas de solution et j'espère trouver un peu d'aide ici :-) J'ai un programme composé de 2 activités: - MainActivity: affiche des informations - FiltersActivity: permet de déterminer les informations à afficher grâce à des checkbox MainActivity contient une ArrayList<String> permettant de connaitre le nom des informations à afficher en temps réel. public static ArrayList<String> infosAffichees; FiltersActivity contient une ListView. Une ligne de ListView est composée de: <LinearLayout><CheckBox /></LinearLayout> Je définis un texte dynamiquement à chacune de mes checkbox lors de la création de la ListView. Ce que je veux faire, c'est simplement de vérifier que le nom de la checkbox est présent dans le ArrayList infosAffichees. Autrement dit, je compare checkbox.getText() à infosAffichees.get(i). Ca marche, grossomodo, mais il y a toujours la première checkbox qui se coche quand je switch entre les deux activités, même quand je ne l'ai pas cochée et que son nom n'est pas présent dans infosAccichees. Mon code: public class FiltersActivity extends Activity { private final static String[] infos = {"Ascenseurs", "Informations", "WC"}; private ListView filtres; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.filters_activity); filtres = (ListView)findViewById(R.id.liste_filtres); filtres.setAdapter(new adapteurFiltres(this)); } private static class adapteurFiltres extends BaseAdapter { private LayoutInflater mInflater; public adapteurFiltres(Context context) { mInflater = LayoutInflater.from(context); } public int getCount() { return infos.lenght; } public Object getItem(int position) { return 0; } public long getItemId(int position) { return 0; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.ligne_listview, null); holder = new ViewHolder(); holder.checkBox = (CheckBox)convertView.findViewById(R.id.checkbox_filtres); holder.image = (ImageView)convertView.findViewById(R.id.image_filtres); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } //Récupération des données String texte = AnalyseurBatiment.typesPictos.get(position); //Entrée des valeurs dans la ligne courante holder.checkBox.setText(texte); holder.image.setImageResource(R.id.image); //Vérifie l'état actuel de l'affichage pour cocher les CheckBox for(int i = 0; i <BuildingActivity.camera.getPictosVisibles().size(); i++) { String enCours = MainActivity.infosAffichees.get(i); if(enCours.equals(texte)) // CECI NE FONCTIONNE PAS, LA PREMIERE CHECKBOX EST COCHEE DES QU'UNE AUTRE EST COCHEE holder.checkBox.setChecked(true); } holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) MainActivity.ajouterTypePictosVisible(buttonView.getText().toString()); else MainActivity.retirerTypePictosVisible(buttonView.getText().toString()); } }); return convertView; } static class ViewHolder { CheckBox checkBox; ImageView image; } } Je précise ce qui se passe dans mon activité: - Affichage de MainActivity - Menu -> filtres -> Affichage de FiltersActivity - Cochage de "Ascenseurs" - Affichage de MainActivity avec uniquement les ascenseurs de visibles - Menu -> filtres - > Affichage de FiltersActivity - ... FiltersActivity a bien les ascenseurs cochés, mais également les Informations... Screen: http://img802.imageshack.us/img802/3909/deviceg.png Désolé pour le post à rallonge, j'espère que quelqu'un prendra le temps de le lire. Salut à tous, Djizou. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Elth Posté(e) 21 juin 2011 Share Posté(e) 21 juin 2011 Salut, C'est un peu dur de t'aider sans pouvoir faire de tests là... Essaye d'affiche tes variables dans un bon vieux println pour savoir quelles données sont erronées. Le problème ne viens peut être pas de là, mais peut être d'un endroit où tu transfert tes variables entre tes classes... J'ai un peu de mal à dire désolé mais ton code à l'air bon et là tu n'as plus qu'à faire plusieurs séries de tests pour voir d'où viens précisément le problème... 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.