2010-08-12 22 views
20

Ho appena avviato Android e sto riscontrando alcuni problemi.
Ho creato un ListView che viene popolato da un database.
Ogni riga ha un pulsante per eliminare l'elemento dall'elenco e dal database.Passare un parametro al listener onclick su un pulsante in una riga listview

Sono in grado di collegare un listener di eventi al pulsante ma non sono stato in grado di determinare il record del database corrispondente da eliminare.

La mia classe è mostrato sotto

public class FeedArrayAdapter extends ArrayAdapter<Feed> implements OnClickListener 
{ 
    private ARssEReaderDBAdapter dba; 
    private String TAG = "FeedArrayAdapter"; 

    public FeedArrayAdapter(Context context, int textViewResourceId, List<Feed> items)   { 
    super(context, textViewResourceId, items); 
    Log.w(TAG, "List"); 


    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     Log.w(TAG, "getView"); 
     View v = convertView; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(R.layout.feedlistrow, null); 
    } 
    Feed feed = getItem(position); 
    if (feed != null) { 
     TextView title = (TextView)v.findViewById(R.id.TextView01); 
     if (title != null) { 
      title.setText(feed.getTitle()); 
     } 
     Button btnDelete = (Button)v.findViewById(R.id.btnDelete); 
     btnDelete.setOnClickListener(this); //btnDeleteFeedListener 
    } 
    return v; 
} 

public void onClick(View v) { 
    Log.w(TAG, "something got clicked: "); 
} 

Così come posso passare il database ID record al gestore in modo da poter utilizzare l'adattatore di database per eliminarlo?

risposta

39

funzione consente di memorizzare l'ID del record nel tag, chiamare setTag() sulla vostra vista, e di leggere in onclick chiamare getTag()

22

Creare una classe interna che implementa OnClickListener e quindi passare la variabile di posizione nel costruttore.

private Class MyClickListener implements OnClickListener { 

    private int position; 

    public MyClickListener(int position) { 
     this.position = position; 
    } 

    public void onClick(View v) { 
     System.out.println("position " + getPosition() + " clicked."); 
    } 

    public int getPosition() { 
     return position; 
    } 

} 
+0

Grazie per le vostre risposte, le opzioni di tag sembrava essere il più facile da implementare e fa tutto ciò che voglio :) Grazie ancora – Richard

+1

Mi piace questa risposta perché il mio setTag() era già in uso per qualcos'altro. –

+0

Questo ha funzionato alla grande in quanto avevo bisogno di passare più di un valore ad un ascoltatore di clic! Grazie – speedynomads

Problemi correlati