2012-05-23 23 views
14

Ich habe eine ListView mit einem Bild auf der rechten Seite. und ich wollte ein Listener-Ereignis onClick ausführen, indem Sie auf das Bild auf der ListView klicken. Bitte sehen das bild als referenz.onClick Listener zu einem ListView Image - Android

enter image description here

Ich weiß, grundlegende OnClick Zuhörer Implementations, aber dies scheint ein wenig schwierig zu mir zu sein: P

vergessen zu erwähnen, durch die tatsächliche ListView klicken, wird eine neue Aktivität Shootup, so brauche ich um beide Schemas beizubehalten.

listView.setOnItemClickListener(new OnItemClickListener() { 

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

    }); 

Der obige Code ausführen eine Deletion von eventsData.remove(id); auf jedem Listenelement klicken ist eine Datenbank Helfer diese Aufgabe für die Ausführung. Wie ich schon sagte, ich brauche eine Methode, um den gleichen Prozess rüberzubringen, indem ich auf das Bild klicke, nicht auf das gesamte Listenelement. Ich möchte, dass das Listenelement später eine andere Aktion ausführt.

Ich hoffe jetzt bin ich ein bisschen klar.


Die Lösung:

Wenn jemand über die gleiche Art von Situation kommt hier dann ist der vollständige Code für den Adapter.

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

}

Ich weiß, dass die Codierung ein bisschen beschissen ist so mit mir tragen, ich will nur den eigentlichen Prozess zeigen, dass es ist.

Es ist für mich arbeiten :)

Antwort

9

Sie sollten es tun Sie in Ihrem Adapternicht in Activity.

yourImg.setOnClickListener(new OnClickListener() { 

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

Wie kann ich bestimmen, der aktuelle Stand von das Listenelement ?? irgendein Zeiger oder Bezeichner? –

+0

Was meinst du mit "aktueller Zustand"? – candyleung

+0

Hey, schau dir mal den letzten Code an ... danke an dich :) –

2

zur letzten Antwort hinzufügen und auf diese Antwort reering, fügte ich einige Code der Ansicht, nach dem Löschen eines Eintrags oder andere Aktionen zu aktualisieren:

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

} 
} 

Es funktioniert für mich, genießen !!

3

Erstellen einer Schnittstelle für von Adapter-Aktivität Kommunikation

public interface ListenerActivity   
{  
public void Remove();  
} 

in Ihrem Adapter Klasse:

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

in Ihrer Tätigkeit:

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

Verwandte Themen