Aller au contenu

Multiple zone cliquable dans une ligne de ListView


Pierre87

Recommended Posts

Salut !

J'ai essayé d'ajouter un Button dans une ligne de ListView.

Malheureusement, ça empêche de cliquer la cellule (et je suis aussi bien embêté pour récupérer l'id de ma ligne quand on clique sur le bouton)

Vous avez une idée pour arriver à avoir plusieurs zones cliquable sur une ligne ?

Merci !

Lien vers le commentaire
Partager sur d’autres sites

L'id de la ligne dans le bouton, perso j'utilise monBouton.setTag(monId) pour mettre les infos qui me sont utiles (au moment de l'initalisation des composants de la vue dans getView()).

Pour le pb de ne pas pouvoir "cliquer sur la cellule", je ne suis pas sûr de comprendre.

Lien vers le commentaire
Partager sur d’autres sites

Dans la layout d'une view d'une ligne, ajoute un Button.

Le OnItemClickListener de ta view ne fonctionnera plus :P

En gros, je voudrais pouvoir cliquer sur la totalité de ma ligne,

ou sur un bouton de ma ligne,

et pouvoir facilement déterminer si le clic vient de ma ligne ou de mon bouton, et le numéro de la ligne

J'ai vu que l'application Twidroid a déjà cette fonctionnalité.

Dans la timeline, on peut soit cliquer sur l'image de la personne,

ou sur le texte du tweet.

Lien vers le commentaire
Partager sur d’autres sites

  • 3 weeks later...

je dis ça comme ça, je n'ai pas testé, mais si tu met un écouteur sur l'événement click du TextView (je suppose que c'est un TextView qui contient le reste du contenu de la ligne) à coté du bouton... est ce que tu n'obtient pas l'effet attendu ?

Lien vers le commentaire
Partager sur d’autres sites

Après quelques recherches j'ai un code de ce style :

Dans l'adapter de ma ListView :


public class MailAdapter extends ArrayAdapter{

   private TextView subject;
   private TextView receiver;
   private TextView sender;
   private TextView date;
   private TextView senderText;
   private TextView receiverText;
   private ImageView imgClassement;

   public MailAdapter(Context context, int textViewResourceId, List mails) {
       super(context, textViewResourceId,mails);        
   }

   public View getView(int position, View convertView, ViewGroup parent) {

       View view = convertView;

       //If view does not exist, we create it
       if (view == null){  

           LayoutInflater li = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
           view = li.inflate(R.layout.headermail, null);

       }

       //Create list of mail
       MailHeader mail = getItem(position);

       subject = (TextView)view.findViewById(R.id.subject);
       receiver = (TextView)view.findViewById(R.id.receiver);
       sender = (TextView)view.findViewById(R.id.sender);
       date = (TextView)view.findViewById(R.id.date);
       senderText = (TextView)view.findViewById(R.id.senderText);
       receiverText = (TextView)view.findViewById(R.id.receiverText);
       imgClassement = (ImageView)view.findViewById(R.id.imgClassement);[color="#A52A2A"] //L'icone sur laquelle l'utilisateur peut cliquer pour afficher les détails du mail (par une fenêtre en surimpression)[/color]

       if (mail != null)
       {

           //Looking for classement lvl to display corresponding lights
              int drawable = retrieveClassement(mail.getClassementLvl(), mail.getReaded(), mail.getSenderEmail(), mail.isDraft());
              imgClassement.setImageResource(drawable);
              imgClassement.setTag(mail);
              HeaderMailDisplayActivity hm = new HeaderMailDisplayActivity();
              imgClassement.setOnClickListener(new View.OnClickListener() {

               @Override
               public void onClick(View v) {
                   [color="#A52A2A"]// La j'aimerai pouvoir renvoyer à mon activity le mail pour lequel l'user à cliquer mais mais je ne vois pas comment faire le lien entre les 2 [/color]

               }
           });


                  //read or not read ?
               if (mail.getReaded() == BoozterMailConstants.BB_MAIL_TYPE_UNREAD)
               {
                   headerStyle(mail, R.color.black, Typeface.BOLD);
                   senderText.setTypeface(null, Typeface.BOLD);
                   receiverText.setTypeface(null, Typeface.BOLD);

               // mail is draft ?
               }else if(mail.isDraft()){

                   headerStyle(mail, R.color.blue_button_bottom, Typeface.ITALIC);
                   senderText.setTypeface(null, Typeface.ITALIC);
                   receiverText.setTypeface(null, Typeface.ITALIC);

               // mail is read and not draft
               }else{

                   headerStyle(mail, R.color.black, Typeface.NORMAL);
                   senderText.setTypeface(null, Typeface.NORMAL);
                   receiverText.setTypeface(null, Typeface.NORMAL);
               }
       }
       //return view to the activity
       return view;
   }



Voila donc mon soucis, le OnClick sur les boutons fonctionnent, l'écouteur de la liste en général fonctionne, mais je ne sais pas quoi mettre dans le OnClick pour renvoyer à mon activity l'id du mail pour qu'elle affiche les details du mail en surimpression

Modifié par Nanis
Lien vers le commentaire
Partager sur d’autres sites

Tu as placé une référence à ton objet mail dans le setTag() du imgClassement sur lequel tu as positionné ton OnClickListener.

Donc dans le onClick() tu peux récupérer cette référence en faisant un v.getTag() et la transmettre à une méthode de ton Activity.

Lien vers le commentaire
Partager sur d’autres sites

En fait, c'est assez bizarre

- Une ligne simple : je peux cliquer

- Une ligne avec un Button : je ne peux plus cliquer la ligne

- Une ligne avec une ImageView sur laquelle j'ai rajouté un onClickListener : je peux cliquer la ligne

Donc en gros : je n'utilise pas Button dans une ListView,

mais je suis intéressé par une explication sur ce phénomène assez bizarre :P

Lien vers le commentaire
Partager sur d’autres sites

Tu as placé une référence à ton objet mail dans le setTag() du imgClassement sur lequel tu as positionné ton OnClickListener.

Donc dans le onClick() tu peux récupérer cette référence en faisant un v.getTag() et la transmettre à une méthode de ton Activity.

Merci Nivek

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...