2012-05-23 2 views
14

J'ai un ListView avec une image sur le côté droit. et je voulais effectuer un événement d'écoute onClick en cliquant sur l'image sur le ListView. S'il vous plaît voir l'image pour référence.onClick écouteur à une image ListView - Android

enter image description here

Je sais OnClick Implémentations auditeur de base, mais cela me semble être un peu difficile à: P

oublié de mentionner, en cliquant sur le ListView réelle sera Shootup une nouvelle activité, donc j'ai besoin pour maintenir les deux schémas.

listView.setOnItemClickListener(new OnItemClickListener() { 

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

    }); 

Le code ci-dessus effectuer une suppression en cliquant sur un élément de la liste eventsData.remove(id); est une aide de base de données pour l'exécution de cette tâche. Comme je l'ai dit maintenant, j'ai besoin d'une méthode pour exécuter ce même processus en cliquant sur l'image, pas sur l'élément de la liste entière, je veux que l'élément de liste fasse une autre action plus tard.

J'espère que maintenant je suis un peu clair.


La solution:

Si quelqu'un vient dans le même genre de situation, alors est ici le code complet de l'adaptateur.

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

}

Je sais que le codage est un peu merdique alors supporter avec moi, je veux juste montrer le processus réel qui est tout.

Il travaille pour moi :)

Répondre

9

Vous devriez le faire dans votre Adapterpas Activity.

yourImg.setOnClickListener(new OnClickListener() { 

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

Comment puis-je déterminer l'état actuel de l'élément de liste ?? un pointeur ou un identifiant ?? –

+0

que voulez-vous dire par "état actuel"? – candyleung

+0

Hey regardez le code final ... merci à vous :) –

2

Ajout à la dernière réponse et reering à cette réponse, j'ai ajouté du code pour actualiser la vue après la suppression d'un article ou d'autres actions:

//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(); 

} 
} 

Il fonctionne pour moi, profiter !!

3

Créer une interface de communication de l'adaptateur à l'activité

public interface ListenerActivity   
{  
public void Remove();  
} 

dans votre classe Adaptateur:

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(); 
    } 
}); 
} 

Votre activité:

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 @Satheesh :) +1;) –