2012-07-21 15 views
5

Ho un ListView personalizzato che contiene uno Button. La funzione di questo pulsante è il pulsante Elimina. Ogni volta che l'utente fa clic su questo pulsante, la riga corrente verrà eliminata.come utilizzare il metodo onClickListener di Button su un ListView

  • Come posso farlo?
  • Come si possono impostare onClickListener per questo pulsante?
  • Come posso rilevare l'ID della riga su cui è attivo questo pulsante?

Grazie in anticipo.

+0

'setOnItemClickListener()' su listview se u bisogno solo di fila id – MAC

+0

[vedere questo esempio] (http://samir-mangroliya.blogspot.in/p/android-customized-listview.html) –

risposta

7

Nella tua personalizzato adapater di classe getView()

buttonDelete.setOnClickListener(new OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 
    // Use position parameter of your getView() in this method it will current position of Clicked row button 
    // code for current Row deleted...    
    } 
}); 
+0

Quale prima avrei dovuto trovareById? –

+0

@PaulBrewczynski fuori rotta – sudoman281

1

Utilizzare questo all'interno del metodo GetView della classe adattatore.

holder.button.setOnClickListener(new OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 

    } 
}); 
4

In primo luogo, sarà molto semplice gestire il clic su questo elemento. Devi solo aggiungere un listener con: myButton.setOnClickListener(mBuyButtonClickListener). Questa azione viene in genere eseguita sull'implementazione getView(...) di ListView.

L'ascoltatore può sapere qual è la posizione dell'articolo del pulsante utilizzando myListView.getPositionForView(myButton). Guardate questo campione di chi ascolta:

private OnClickListener mBuyButtonClickListener = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     final int position = getListView().getPositionForView(v); 
     if (position != ListView.INVALID_POSITION) { 
      //DO THE STUFF YOU WANT TO DO WITH THE position 
     } 
    } 
}; 

Una volta fatto questo, si dovrebbe avere problemi a gestire il clic sull'oggetto stesso e qualche altra propagazione tocco evento.

Pertanto, è necessario leggere this article che descrive completamente l'utilizzo di più aree tangibili all'interno di ListView. Sarebbe di grande aiuto.

1

ho guardato dappertutto e non delle risposte mi ha aiutato fino a quando uno ha fatto.

Quello che ho fatto è stato creare un HolderView e avvolto tutti i miei textviews e altri widget nella mathod GetView del adpater:

mettere questa classe in:

static class ViewHolder 
{ 
    TextView text1; 
    TextView text2; 
    TextView text3; 
} 

e ho anche decalared lo stesso quelli normalmente come sono separati ora:

TextView text1; 
TextView text2; 
TextView text3; 

quindi dichiarare tutti i punti di vista e widget dopo gonfiare il layout in GetView:

holder = new ViewHolder(); 
holder.text1 = (TextView) vi.findViewById(R.id.textView2single); 
holder.text2 = (TextView) vi.findViewById(R.id.textView3single); 
holder.text3 = (TextView) vi.findViewById(R.id.textView4single); 

all'interno del metodo onClick, ho usato:

View parentView = (View) v.getParent(); 

e poi dichiarato tutti i miei widget nuovamente utilizzando questo parentview:

text1 = (TextView) parentView.findViewById(R.id.textView2single); 
text2 = (TextView) parentView.findViewById(R.id.textView3single); 
text3 = (TextView) parentView.findViewById(R.id.textView4single); 

In questo modo im costringendo il mio onClick per ottenere il genitore posizione dell'elemento della vista elenco, quindi tutti i widget all'interno di quel genitore possono essere richiamati facilmente, quindi puoi fare quello che ti piace con esso. Questo è l'unico modo in cui ho trovato che funziona.

0

Creare una vista adattatore elenco personalizzato, estendere BaseAdapter e implementare OnClickListener

public class ListAdapter extends BaseAdapter implements OnClickListener {} 

l'override del metodo GetView

@Override 
public View getView(int 
     position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    View row = convertView; 
    ViewHolder holder = null; 

    if (row == null) { 
     LayoutInflater inflater = (LayoutInflater) mContext 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = inflater.inflate(R.layout.list_item, parent, false); 
     holder = new ViewHolder(); 
     holder.b1= (Button) row.findViewById(R.id.b1); 
     b1.setOnClickListener(this); 
    else { 

     holder = (ViewHolder) row.getTag(); 

    } 
} 

ora l'override del metodo onclick

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch (v.getId()) { 
     case R.id.b1: 
      //button b1 click event 
      break; 
    } 
} 

public class ViewHolder { 
    Button b1; 
} 
0

Creare un nuova vista tipo variabile a nd assegnalo con currenView (Controlla se iit è nullo). Definisci le variabili (ImageButton preso qui) e imposta viewId nel modo sotto indicato.

public View getView(int position, View convertView, ViewGroup parent) { 
     View itemview=convertView; 
     if (itemview==null) 
     { 
      itemview=getLayoutInflater().inflate(R.layout.group_list,parent,false); 

     } 
     final group_contacts currentcontact=g_contact.get(position); 
     ImageButton delete=(ImageButton) itemview.findViewById(R.id.imgbtn_delete); 
     delete.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //Add your code here to run on tapping button 
      } 
     }); 
     return itemview; 


    } 
0

Per utilizzare onClickListener() metodo su un Button di un ListView, è necessario applicare onClickListener() sul pulsante nella Adapter s' getView Methode.

Ma il problema è che non sarà possibile ottenere il valore dal parametro position di getView.

Per ottenere il position del pulsante che hai toccato, devi chiamare il metodo getPositionForView() sul tuo ListView.

Lets disco con un esempio per una migliore comprensione,

  • Considerate si dispone di un nome ListViewExampleListview

  • Un Button su di esso chiamato ExampleButton eu vuole utilizzare onClickListener() su di esso.

    Examplebutton.setOnClickListener(new OnClickListener() { 
    
          @Override 
          public void onClick(View v) { 
         final int position= ExampleListview..getPositionForView(v); 
        /*Where 'v' is actually the 'View' object Which you are clicking.*/ 
    
    /*you can now right your code her & determine the your desired button by 
        using the position parameter */ 
    } 
    
Problemi correlati