Aller au contenu

Gestion des checkbox dans ListView


Djizou

Recommended Posts

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

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

Archivé

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

×
×
  • Créer...