2010-11-20 3 views
0

J'ai dans mon adaptateur:Obtenez la position après un clic sur le bouton dans une vue liste

public View getView(int position, View convertView, ViewGroup parent) 
    { 
     ViewHolder holder; 
     if(convertView==null) 
     { 
      convertView = myInflater.inflate(R.layout.list, null);   
      holder = new ViewHolder(); 
      holder.text01 = (TextView) convertView.findViewById(R.id.Text01); 
      ((Button)convertView.findViewById(R.id.ListButonPlus)).setOnClickListener(this); 
      convertView.setTag(holder); 
     }else 
     { 
      holder = (ViewHolder) convertView.getTag();   
     } 
      return convertView; 
     } 

Et que:

public void onClick(View v) 
{ 
    Toast.makeText(v.getContext(), "pouette",1000).show(); 
} 

Et j'essayer t obtenir la position de l'élément qui contient mon bouton.

Comment puis-je transmettre la variable de position présente dans la méthode getView à ma méthode onClick? j'aurai plusieurs bouton Dans ma vue (vue article)

Merci

Répondre

1

Ok j'ai trouvé, je passe ma position au ViewHolder
et je reçois le ViewHolder de l'étiquette de la vue vue ou Parrent par une fonction récursive.
Existe-t-il une méthode différente?

public static class ViewHolder 
    { 
     private TextView text01; 
     public int position; 
    } 
    public ViewHolder getViewHolder(View v) 
    { 
     if(v.getTag() == null) 
     { 
      return getViewHolder((View)v.getParent()); 
     } 
     return (ViewHolder)v.getTag(); 
    } 
    public void onClick(View v) { 

     ViewHolder vh = getViewHolder(v); 
       vh.position // Here I get position 
     } 
+0

belle façon d'obtenir la position. vraiment aidé! +1 – Jean

0

Je sais ce post est vieux, mais cela pourrait aider d'autres:

Dans le getView de mon adapeter:

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     ContactHolder holder = null; 

     final ContactRow ContactRow = ContactRowList.get(position); 

     if(row == null) 
     { 

     ... 
     holder.delete = (ImageButton)row.findViewById(R.id.btn_contact_delete); // my button inside the item 

      holder.delete.setTag(position); 
     ... 
     } 

Ceci est mon écouteur pour ce bouton

holder.delete.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v){ 

       int position=(Integer)v.getTag(); 
        ((MainActivity)context).deleteContact(position,true); // call the delete function form the main activity 
      } 
     }); 

Mon titulaire

static class ContactHolder 
{ 
    ... 
    ImageButton delete; 
} 
Questions connexes