2012-05-23 8 views
14

Ho un ListView con un'immagine sul lato destro. e volevo eseguire un evento listener onClick facendo clic sull'immagine sullo ListView. Si prega di vedere l'immagine per riferimento.Ascolto onClick su un'immagine ListView - Android

enter image description here

So di base OnClick Implementazioni ascoltatore, ma questo sembra essere un po 'difficile per me: P

dimenticato di dire, cliccando l'attuale ListView sarà Shootup una nuova attività, quindi ho bisogno per mantenere entrambi gli schemi.

listView.setOnItemClickListener(new OnItemClickListener() { 

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

    }); 

Il codice di cui sopra eseguire una cancellazione facendo clic su qualsiasi elemento della lista eventsData.remove(id); è un aiutante di database per l'esecuzione di questo compito. come ho detto ora ho bisogno di un metodo per eseguire questo stesso processo, facendo clic sull'immagine, non sull'intero elemento della lista, voglio che l'elemento lista faccia qualche altra azione in seguito.

Spero di essere chiaro un po '.


La soluzione:

Se qualcuno venire attraverso lo stesso tipo di situazione, allora qui è il codice completo per l'adattatore.

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

}

So che la codifica è un po 'scadente così portare con me, voglio solo mostrare il processo vero e proprio gioco è fatto.

E 'di lavoro per me :)

risposta

9

Si dovrebbe fare nel vostro Adapternon in Activity.

yourImg.setOnClickListener(new OnClickListener() { 

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

Come determino lo stato attuale di l'elemento della lista ?? qualsiasi puntatore o identificatore ?? –

+0

cosa intendi per "stato attuale"? – candyleung

+0

Ehi basta dare un'occhiata al codice finale ... grazie a te :) –

2

aggiunta all'ultima risposta e reering a questa risposta, ho aggiunto un po 'di codice per aggiornare la visualizzazione dopo l'eliminazione di un elemento o altre azioni:

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

} 
} 

Funziona per me, godere !!

3

Creare un'unica interfaccia per la comunicazione da adattatore all'attività

public interface ListenerActivity   
{  
public void Remove();  
} 

nella classe Adapter:

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

nella vostra attività:

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

Bello uno @Satheesh :) +1;) –

Problemi correlati