2012-05-23 9 views
14

Tengo un ListView con una imagen en el lado derecho. y quería realizar un evento de escucha onClick haciendo clic en la imagen en el ListView. Por favor, mira la imagen para referencia.OnClick oyente a una imagen ListView - Android

enter image description here

OnClick implementaciones básicas de escucha, pero esto parece ser un poco difícil para mí: P

se olvidó de mencionar, haciendo clic en el real ListView se shootup una nueva actividad, por lo que necesitan para mantener ambos esquemas.

listView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, 
       long id) { 
      eventsData.remove(id); 
      cursor.requery(); 
     } 

    }); 

El código anterior realice una eliminación haciendo clic en cualquier elemento de la lista eventsData.remove(id); es un ayudante de base de datos para ejecutar esta tarea. como dije ahora, necesito un método para realizar este mismo proceso al hacer clic en la imagen, no en todo el elemento de la lista, quiero que el elemento de la lista realice otra acción más adelante.

Espero que ahora esté un poco claro.


La solución:

Si alguien venir a través del mismo tipo de situación, entonces aquí es el código completo para el adaptador.

class CustomAdapter extends ArrayAdapter<String> { 
CustomAdapter() { 
    super(Activity.this, R.layout.row, R.id.label, items); 
} 

public View getView(final int position, View convertView, 
        ViewGroup parent) { 
    View row=super.getView(position, convertView, parent); 
    deleteImg=(ImageView)row.findViewById(R.id.icon); 

    deleteImg.setImageResource(R.drawable.delete);  
    deleteImg.setOnClickListener(new OnClickListener() { 
     String s = items[position]; 
    @Override 
    public void onClick(View v) { 
     Toast.makeText(context, s, Toast.LENGTH_SHORT).show();   
    } 
}); 

    return(row); 
} 

}

Sé que la codificación es un poco cutre así que tengan paciencia conmigo, sólo quiero mostrar el proceso real eso es todo.

Está funcionando para mí :)

Respuesta

9

Debe hacerlo en su Adapterno en Activity.

yourImg.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // things you want to do 
    } 
}); 
+0

¿Cómo determino el estado actual de el elemento de lista? cualquier puntero o identificador? –

+0

¿qué quiere decir con "estado actual"? – candyleung

+0

Hola, echemos un vistazo al código final ... gracias a usted :) –

2

Agregando a la última respuesta y reering a esta respuesta, he añadido algo de código para actualizar la vista después de eliminar un artículo o acciones de otros:

//in your adapter you have to get list of items: 

public CartListAdapter(Context context, int resourceId, 
     List<CartItemModel> items) { 
    super(context, resourceId, items); 
    this.context = context; 
    this.items= items; 
} 

//after that you have to set a listner on the imageView like this: 

public View getView(int position, View convertView, ViewGroup parent) { 
    holder.imageViewDelete.setOnClickListener(new imageViewClickListener(position)); 
    // some other lines code ... 
    // here we get the item to remove 
    rowItem= getItem(position); 
    } 

//and here the definition of the listner: 

private class imageViewClickListene implements OnClickListener { 
    int position; 
    public imageViewClickListene(int pos) 
     { 
      this.position = pos; 
     } 

    public void onClick(View v) { 

    // here we remove the selected item  
     items.remove(rowItem); 
      // here we refresh the adapter 
     CartListAdapter.this.notifyDataSetChanged(); 

} 
} 

Funciona para mí, disfrutar !!

3

Crear una interfaz para la comunicación del adaptador a la actividad

public interface ListenerActivity   
{  
public void Remove();  
} 

en su clase de adaptador:

class CustomAdapter extends ArrayAdapter<String> { 

ListenerActivity listener; 

CustomAdapter(YourActivity obj) { 
    super(Activity.this, R.layout.row, R.id.label, items); 

    listener=obj; 
} 
public View getView(final int position, View convertView, 
       ViewGroup parent) { 
ImageId.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     listener.Remove(); 
    } 
}); 
} 

En Su Actividad:

class MyActivity extends Activity implements ListenerActivity 
{ 
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
} 
@Override 
    public void Remove() { 

//Do your remove functionality here 
    }   
} 
+1

Nice one @Satheesh :) +1;) –

Cuestiones relacionadas