Aller au contenu

Spinners rattachés à une ListView


Recommended Posts

Bonjour à tous,

J'ai une activity qui est composé de 2 spinners et un bouton de RAZ dans sa partie haute puis d'une ListView dans sa partie basse.

A chaque fois que l'utilisateur change la valeur d'un spinner, la ListView se charge en conséquence (et les données sont récupérés dans les tables qui vont bien).

Sauf que dans mon cas, lors du chargement de l'Activity, mes 2 spinners sont remplis et donc ils sont "chargés" avec une valeur !

Du coup, ma ListView est déjà triée !

Or je voudrais qu'à l'ouverture de mon Activity, la ListView soit affiché, sans tri ! (comme lors d'un clic sur mon bouton "RAZ")

Avez vous une idée pour réaliser ceci est ainsi "inhiber" le tri des spinners au démarrage de l'activity ?

Meci :)

Lien vers le commentaire
Partager sur d’autres sites

Et bien, c'est ce que je fait !

Mais en fait, comme les spinners se chargent, je pense que c'est ce qui pose problème !

Avec le code, ça sera plus clair :

	public void onCreate(Bundle savedInstanceState){
	super.onCreate(savedInstanceState);
	setContentView(R.layout.listertransactions);
	listeUtilisateurs = ((Spinner)findViewById(R.id.SpinnerUtilisateur));
	listeUtilisateurs.setOnItemSelectedListener(new OnItemSelectedListener() {

		@Override
		public void onItemSelected(AdapterView<?> arg0, View arg1,
				int arg2, long arg3) {
			dataBind(ListerTransactions.WHERE_UTILISATEUR);	
		}

		@Override
		public void onNothingSelected(AdapterView<?> arg0) {			
		}
	});
	listeFichiers = (Spinner)findViewById(R.id.SpinnerFichier);		
	listeFichiers.setOnItemSelectedListener(new OnItemSelectedListener() {
		@Override
		public void onItemSelected(AdapterView<?> arg0, View arg1,
				int arg2, long arg3) {
			dataBind(ListerTransactions.WHERE_FICHIER);					
		}

		@Override
		public void onNothingSelected(AdapterView<?> arg0) {			
		}
	});		
	((Button)findViewById(R.id.ButtonRAZ)).setOnClickListener(new OnClickListener() {
		@Override
		public void onClick(View v) {
			dataBind(0);
		}
	});
	db = new DBAdapter(this);
	db.open();
	/* On remplit les spinners */
	Cursor c = db.recupererFichiers();
	startManagingCursor(c);
	adapterFichiers = new SimpleCursorAdapter(this,  
               android.R.layout.simple_spinner_item, c,  
               new String[] { "nomFichier"}, new int[] { android.R.id.text1}); 
	adapterFichiers.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
	listeFichiers.setAdapter(adapterFichiers);

	 c = db.recupererUtilisateurs();
	startManagingCursor(c);
	adapterUtilisateurs = new SimpleCursorAdapter(this,  
               android.R.layout.simple_spinner_item, c,  
               new String[] { "nomUtilisateur"}, new int[] { android.R.id.text1}); 
	adapterUtilisateurs.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
	listeUtilisateurs.setAdapter(adapterUtilisateurs);
	/* fin des spinners */

	dataBind(0); // on récupère l'ensemble des transactions sans tri
}

dataBind(0) permet de charger la ListView sans tri !

Pour être plus précis, il semblerait que le problème ne s'applique qu'à l'utilisateur 1 !

Toutes les transactions concernant l'utilisateur 1 sont affichées ... tout fichiers confondus !

Lien vers le commentaire
Partager sur d’autres sites

Il suffit de demander ! :)

public void dataBind(int tri){		
	// TODO : à la première arrivée, tout n'est pas RAZ 
	/* Paramètre  de  tri à utiliser */
	switch(tri){
		case WHERE_FICHIER:
			argument = Long.toString(listeFichiers.getSelectedItemId());
			break;
		case WHERE_UTILISATEUR:
			argument = Long.toString(listeUtilisateurs.getSelectedItemId());
			break;
		case 0:
		default:
			argument="";
	}

	Cursor c = db.recupererTransactions(tri,argument);
	startManagingCursor(c);
	SimpleCursorAdapter adapter = new SimpleCursorAdapter(		this, 
																R.layout.listtransaction,
																c, 
																new String[]{	"lieuTransaction","dateTransaction", "libelleTransaction", 
																				"nomUtilisateur","nomFichier", "montantTransaction","_id"}, 
																new int[] { 	R.id.listLieu, R.id.listDate, R.id.listLibelle, 
																				R.id.listUtilisateur,R.id.listFichier, R.id.listMontant, R.id.listId}	
															);
	this.getListView().setAdapter(adapter);
	this.getListView().setOnItemClickListener(new OnItemClickListener() {
		@Override
		public void onItemClick(final AdapterView<?> arg0, View arg1,
				final int arg2, long arg3) {
			Log.d("DEBUGTAG", "Here !");
			final AlertDialog.Builder builder = new AlertDialog.Builder(arg0.getContext());
			builder.setMessage("Voulez vous supprimer  la transaction n°"+arg0.getAdapter().getItemId(arg2) +" ?")
			       .setCancelable(false)
			       .setPositiveButton("Oui", new DialogInterface.OnClickListener() {
			           public void onClick(DialogInterface dialog, int id) {
							db.supprimerTransaction(arg0.getAdapter().getItemId(arg2));
							Toast.makeText(ListerTransactions.this, "Suppresion de la transaction n°"+arg0.getAdapter().getItemId(arg2), 5000).show();
							dataBind(0);
			           }
			       })
			       .setNegativeButton("Non", new DialogInterface.OnClickListener() {
			           public void onClick(DialogInterface dialog, int id) {
			                dialog.cancel();
			           }
			       });
			AlertDialog alert = builder.create();
			alert.show();
		}
	});
}

Lien vers le commentaire
Partager sur d’autres sites

Voilà !

		public Cursor recupererTransactions(int tri, String argument){
	String clauseWhere = "";
	switch(tri){
		case ListerTransactions.WHERE_FICHIER:
			clauseWhere = "WHERE fichiers._id="+argument;
			break;
		case ListerTransactions.WHERE_UTILISATEUR:
			clauseWhere = "WHERE utilisateurs._id="+argument;
			break;
		case 0:
		default:
			clauseWhere = " ";
	}
	return db.rawQuery("SELECT transactions._id, transactions.lieuTransaction, transactions.libelleTransaction, " +
			"transactions.dateTransaction , transactions.montantTransaction, utilisateurs._id as idUtilisateur, utilisateurs.nomUtilisateur, " +
			"fichiers._id as idFichier, fichiers.nomFichier " +
			"FROM transactions JOIN utilisateurs ON utilisateurs._id=transactions.idUtilisateurTransaction " +
			"JOIN fichiers ON fichiers._id=transactions.idFichierTransaction " + clauseWhere + " " +
			"ORDER BY fichiers._id", null);	
	}

Lien vers le commentaire
Partager sur d’autres sites

Désolé, je ne vois pas...

Mais, je ne suis plus sûr de comprendre quel est le problème: dans ton premier post, tu indiquais que tu avais un problème de liste initialement triée alors que tu ne le souhaitais, puis quelques posts plus loin, tu indiques que le problème concerne le client d'id 1 (donc, tri sur client 1 ?) ??

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...