Guims87 Posted December 27, 2011 Share Posted December 27, 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. Link to comment Share on other sites More sharing options...
chpil Posted January 3, 2012 Share Posted January 3, 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 ! ??? Link to comment Share on other sites More sharing options...
ChrOnOs Posted January 13, 2012 Share Posted January 13, 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(); } } }); Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.