2010-08-12 8 views
20

Acabo de iniciar Android y tengo algunos problemas.
He creado un ListView que se rellena desde una base de datos.
Cada fila tiene un botón para eliminar el elemento de la lista y la base de datos.Pasar un parámetro a onclick oyente en un botón en una fila de vista de lista

Puedo conectar un detector de eventos al botón, pero no he podido determinar el registro de la base de datos correspondiente que se eliminará.

Mi clase se muestra a continuación

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: "); 
} 

Entonces, ¿cómo puedo pasar el registro de identificación de la base de datos al controlador para que pueda utilizar el adaptador de la base de datos para eliminarlo?

Respuesta

39

Debe almacenar el ID del registro en la etiqueta, llame setTag() en su vista, y para leer en llamar onclick getTag()

22

Crea una clase interna que implementa OnClickListener y luego pasa la variable de posición en el constructor.

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

Gracias por sus respuestas, las opciones de etiquetas parecían ser los más fáciles de poner en práctica y hace todo lo que quiero que haga :) Gracias de nuevo – Richard

+1

Me gusta esta respuesta porque mi setTag() ya estaba siendo utilizado para otra cosa. –

+0

¡Esto funcionó de maravilla ya que necesitaba pasar más de un valor a un oyente de clic! Gracias – speedynomads

Cuestiones relacionadas