2012-11-24 13 views
8

Ho una visualizzazione elenco nel mio schermo, ogni voce di elenco contiene 2 visualizzazioni di testo e un pulsante. Al clic del pulsante voglio prendere l'indice dell'elenco selezionato per ottenere alcuni dati da un vettore.Impostare Listener OnClick sul pulsante all'interno della visualizzazione elenco in Android

Questo è il mio elenco Custom Adapter.Ma non so come farlo.

private class CustomAdapter extends ArrayAdapter<ServicesItems> { 

    public CustomAdapter(Context context, int resource, 
      int textViewResourceId, List<ServicesItems> objects) { 
     super(context, resource, textViewResourceId, objects); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 
     TextView item = null; 
     TextView description = null; 
     Button subNowBtn; 

     ServicesItems ii = getItem(position); 

     if (null == convertView) { 
      convertView = mInflater.inflate(
        R.layout.list_of_servics_item_2, null); 

      holder = new ViewHolder(convertView); 
      convertView.setTag(holder); 
     } 
     holder = (ViewHolder) convertView.getTag(); 
     // cat_name = holder.gettitle(); 

     Resources resources = getResources(); 

     ServicesItems bean1 = (ServicesItems) servicesVector 
       .elementAt(position); 

     String cat_name_str = bean1.getService_name().toString(); 
     String descreption = bean1.getDescription().toString(); 


     item = holder.getItem(); 
     item.setText(bean1.getDescription()); 

     description = holder.getDescription(); 
     description.setText(bean1.getService_name()); 

     subNowBtn=holder.getSubButton(); 

     return convertView; 
    } 

    private class ViewHolder { 
     private View mRow; 
     private TextView description = null; 
     private TextView item = null; 
     private Button sub = null; 

     public ViewHolder(View row) { 
      mRow = row; 
     } 

     public TextView getDescription() { 
      if (null == description) { 
       description = (TextView) mRow 
         .findViewById(R.id.category_tv); 
      } 
      return description; 
     } 

     public TextView getItem() { 
      if (null == item) { 
       item = (TextView)  
      mRow.findViewById(R.id.descreption_tv); 
      } 
      return item; 
     } 

     public Button getSubButton(){ 
      if(null==sub){ 
       sub=(Button)findViewById(R.id.subscribe_now_btn); 


      } 
      return sub; 
     } 

    } 

} 

risposta

8

l'adattatore provare questo:

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

    if (row == null) 
    { 
     row = inflater.inflate(R.layout.layout, parent, false); 
     wrapper = new YourWrapper (row); 
     row.setTag(wrapper); 
    } 
    else 
     wrapper = (YourWrapper) row.getTag(); 

    wrapper.getButton().setOnClickListener(new OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      // What you want 
     } 
    }); 

    return row; 
} 

EDIT

tua classe wrapper:

public class YourWrapper 
{ 
    private View base; 
    private Button button; 

    public YourWrapper(View base) 
    { 
     this.base = base; 
    } 

    public Button getButton() 
    { 
     if (button == null) 
     { 
      button = (Button) base.findViewById(R.id.your_button); 
     } 
     return (button`); 
    } 
} 

Change sub=(Button)findViewById(R.id.subscribe_now_btn); in sub=(Button) mRow.findViewById(R.id.subscribe_now_btn);

+0

Ho aggiunto questa \t \t \t holder.getSubButton(). SetOnClickListener (nuova OnClickListener() \t \t \t { \t \t \t @Override \t \t \t public void onClick (Visualizza v) \t \t \t { \t \t \t // Che cosa si vuole \t \t \t} \t \t \t}); ma restituisce un puntatore nullo ecc. – Reham

+0

Ho aggiornato la mia risposta. –

+0

Grazie, ora funziona. – Reham

4

è possibile ottenere l'indice di list-view sul pulsante di scatto, ecco due esempi: -

È possibile scrivere questi nel metodo onClick di chi ascolta.

Esempio 1

View parentRow = (View) v.getParent(); 
ListView listView = (ListView) parentRow.getParent(); 
final int position = listView.getPositionForView(parentRow); 

Esempio 2

posizione Set usando setTag durante la creazione vista

mybutton.setTag(position); 

garantita posizione nel ascoltatore

int position = (Integer) view.getTag(); 

Spero che questo aiuto :)

+0

grazie ... tutto ciò di cui avevo bisogno era il metodo getPositionForView :) buona risposta – DoruChidean

Problemi correlati