Jump to content

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 !

Link to comment
Share on other 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.

Link to comment
Share on other 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.

Link to comment
Share on other 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 ?

Link to comment
Share on other 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

Edited by Nanis
Link to comment
Share on other 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.

Link to comment
Share on other 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

Link to comment
Share on other 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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...