Guims87 Posté(e) 27 décembre 2011 Share Posté(e) 27 décembre 2011 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 More sharing options...
chpil Posté(e) 3 janvier 2012 Share Posté(e) 3 janvier 2012 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 More sharing options...
ChrOnOs Posté(e) 13 janvier 2012 Share Posté(e) 13 janvier 2012 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 More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.