Aller au contenu

Dynamisme: problème d'id


Guims87

Recommended Posts

Bonjour,

Je dois concevoir une application Android totalement dynamique. J'ai pu créer tous les éléments dont j'avais besoin. Maintenant je dois m'occuper des "listenner". J'ai penser à l'utilisation d'id pour permettre de retrouver mes éléments sauf que j'ai un problème: je n'arrive pas à créer des id "dynamique" et facile de réutilisation sans fait d'exception "cast".

Je créer une textview avec complétion. Je pose un bouton me permettant de récupérer le contenu de la textview. Ça j'y arrive.

Maintenant dans mon activité j'ai plusieurs couples textview/bouton, et quand j'appuis sur un bouton je veux récupérer le contenu du textview associé à mon bouton. Je n'arrive pas à récupérer le bon contenu.

Je précise que je ne connais pas le nombre de couple textview/bouton.

Un peu de code:

Création d'un couple:

listeRep = question.getListeReponse();
 autoCompl_adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line);
 for (Reponse r : listeRep) {
  autoCompl_adapter.add(r.getLibelle());
 }
 act_reponse.setAdapter(autoCompl_adapter);
 // bouton
 b_ajouter = new Button(CreerParcoursActivity.this);
 b_ajouter.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
 b_ajouter.setText(R.string.ajouter);
 b_ajouter.setId(question.getId());
 b_ajouter.setTextSize(tailleRep);
 b_ajouter.setTextColor(couleurQuest);

Le listenner

b_ajouter.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
// on recupere les bonnes view
ll_reponse = (LinearLayout) findViewById(b_ajouter.getId());
// si non vide on ajoute la ville
if (!(act_reponse.equals(""))) {
 // on creer le linear contenant nom ville
 ll_ajoutVille = new LinearLayout(CreerParcoursActivity.this);
 ll_ajoutVille.setLayoutParams(new LayoutParams(
   LayoutParams.WRAP_CONTENT,
   LayoutParams.WRAP_CONTENT));
 // text contenant nom ville
 tv_ville = new TextView(CreerParcoursActivity.this);
 tv_ville.setLayoutParams(new LayoutParams(
   LayoutParams.WRAP_CONTENT,
   LayoutParams.WRAP_CONTENT));
 tv_ville.setTextColor(couleurRep);
 tv_ville.setTextSize(tailleRep);
 // on recupere le text
 tv_ville.setText(act_reponse.getText().toString());
 // on vide l'autocomp
 act_reponse.setText("");
 // on ajoute
 ll_ajoutVille.addView(tv_ville);
 ll_reponse.addView(ll_ajoutVille);
 // on actualise
 ll_reponse.invalidate();
}
  }
 });

Auriez-vous une piste à me proposer pour poser des id facilement ? Ou y-a-t'il une autre solution ?

J’espère que j'ai étais assez clair. Désolé si il y a des fautes d'orthographes.

Merci.

Lien vers le commentaire
Partager sur d’autres sites

Je ne comprends pas ce que tu veux faire/quel est ton problème. Tu dis vouloir récupérer un TextView dans le listener de ton bouton, mais d'après ton code, c'est dans ce listener que tu crées ce TextView ! ???

Lien vers le commentaire
Partager sur d’autres sites

  • 2 weeks later...

Oula, j'ai l'impression que tu te retrouves avec plusieurs widgets avec le même Id. Je ne sais pas si c'est fiable mais en partant du principe qu'Android génère des Ids du même signe et qu'il accepte aussi bien des id positif que négatif, tu peux essayer de faire ceci :

listeRep = question.getListeReponse();
 autoCompl_adapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_dropdown_item_1line);
 for (Reponse r : listeRep) {
  autoCompl_adapter.add(r.getLibelle());
 }
 act_reponse.setAdapter(autoCompl_adapter);
 // bouton
 b_ajouter = new Button(CreerParcoursActivity.this);
 b_ajouter.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
    LayoutParams.WRAP_CONTENT));
 b_ajouter.setText(R.string.ajouter);
 b_ajouter.setId(question.getId() * -1);
 b_ajouter.setTextSize(tailleRep);
 b_ajouter.setTextColor(couleurQuest);

b_ajouter.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
    // on recupere les bonnes view
    ll_reponse = (LinearLayout) findViewById(b_ajouter.getId() * -1);
    // si non vide on ajoute la ville
    if (!(act_reponse.equals(""))) {
	 // on creer le linear contenant nom ville
	 ll_ajoutVille = new LinearLayout(CreerParcoursActivity.this);
	 ll_ajoutVille.setLayoutParams(new LayoutParams(
	   LayoutParams.WRAP_CONTENT,
	   LayoutParams.WRAP_CONTENT));
	 // text contenant nom ville
	 tv_ville = new TextView(CreerParcoursActivity.this);
	 tv_ville.setLayoutParams(new LayoutParams(
	   LayoutParams.WRAP_CONTENT,
	   LayoutParams.WRAP_CONTENT));
	 tv_ville.setTextColor(couleurRep);
	 tv_ville.setTextSize(tailleRep);
	 // on recupere le text
	 tv_ville.setText(act_reponse.getText().toString());
	 // on vide l'autocomp
	 act_reponse.setText("");
	 // on ajoute
	 ll_ajoutVille.addView(tv_ville);
	 ll_reponse.addView(ll_ajoutVille);
	 // on actualise
	 ll_reponse.invalidate();
    }
  }
 });

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