2010-03-18 14 views
130

Wie höre ich Klick-Ereignis auf einem ListView? DieseSo behandeln Sie ListView Klicken Sie auf Android

ist, was ich habe jetzt

ListView list = (ListView)findViewById(R.id.ListView01); 
... 
list.setAdapter(adapter); 

Wenn ich die folgende

list.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    public void onItemSelected(AdapterView parentView, View childView, 
                 int position, long id) 
    { 
     setDetail(position); 
    } 

    public void onNothingSelected(AdapterView parentView) { 

    } 
}); 

tun, das scheint nicht alles auf Klick zu tun.
Und alle diese Code leben in einer Klasse, die Aktivität erweitert.

Antwort

173

Auf Ihrer Listenansicht verwenden setOnItemClickListener

+0

Dank David. Geezzz, ich habe versucht, SetOnClickListener und SetOnItemSelectedListener aber verpasste lesen SetOnItemClickListener. Danke, Tee – teepusink

+0

ich tat das gleiche wie teepusink: D –

+0

Wie senden Sie dann Daten zu dieser Detailansicht? (Wie YouTube zu einem Video Sie suchen) – Sauron

41

Sie müssen die aufgeblasene Ansicht „Clickable“ setzen und „Lage, Ereignisse zu hören klicken Sie auf“ in Ihrem Adapter Klasse getView() -Methode.

convertView = mInflater.inflate(R.layout.list_item_text, null); 
convertView.setClickable(true); 
convertView.setOnClickListener(myClickListener); 

und den Klick Zuhörer in Ihren ListActivity wie folgt deklarieren,

public OnClickListener myClickListener = new OnClickListener() { 
public void onClick(View v) { 
       //code to be written to handle the click event 
    } 
}; 

Dieses nur gilt, wenn Sie die Adapter sind Customizing von BaseAdapter erstrecken.

Siehe die ANDROID_SDK/samples/ApiDemos/src/com/example/android/apis/view/List14.java für mehr Details

+0

danke Vijay Ich habe klick Problem auf inflat View Ich habe lösen von Ihrer Antwort – dhaiwat

+0

Aber das bestimmt nicht, welches Element angeklickt wird, was es mehr oder weniger nutzlos für eine Liste macht? Richtig? –

+0

Sie können Tag zu convertView setzen und überprüfen Sie das gleiche in onClick .. mit Tag welches Element angeklickt werden kann identifiziert werden ... –

17

Die beiden Antworten vor meinen korrekt sind - können Sie OnItemClickListener verwenden.

Es ist gut, dass der Unterschied zwischen OnItemClickListener und OnItemSelectedListener zu beachten, während subtile klingt in der Tat von Bedeutung ist, als Artikelauswahl und Fokus werden mit dem Touch-Modus Ihres AdapterView bezogen.

Im Berührungsmodus gibt es standardmäßig keine Auswahl und keinen Fokus. Sie können einen Blick auf here für weitere Informationen zu dem Thema werfen.

+2

bah android wahnsinn – max4ever

84

Angenommen Listview-Objekt lv, sind die folgenden-

lv.setClickable(true); 
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 

    Object o = lv.getItemAtPosition(position); 
    /* write you handling code like... 
    String st = "sdcard/"; 
    File f = new File(st+o.toString()); 
    // do whatever u want to do with 'f' File object 
    */ 
    } 
}); 
+1

'lv' ist nicht zugänglich in' onItemClick'. Was ist eine nette Art, um das zu umgehen? – shinjin

+1

@shinjin Machen Sie es endgültig. 'final ListView lv = (ListView) findViewById (R.id.your_list_view);' – Lekensteyn

+0

Sauberer Weg: 'Objekt o = ((ListView) arg0) .getItemAtPosition (position);' – JimmyB

5

Sie haben gesagt setOnItemClickListener jemand zu verwenden.
Der Code wie folgt sein sollte:

listView.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     // When clicked, show a toast with the TextView text or do whatever you need. 
     Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); 
    } 
}); 
5

Erstens muss die Klasse die Click listenener implementiert:

implements OnItemClickListener 

dann einen Zuhörer an die Listview

yourList.setOnItemclickListener(this); 

Und schließlich, Erstellen Sie die Clic-Methode:

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, 
long id) { 
Toast.makeText(MainActivity.this, "You Clicked at " +countries[+ position], Toast.LENGTH_SHORT).show(); 
} 

Sie können einen Code ansehen und herunterladen here

6

Diese Lösung ist wirklich minimalistisch und macht Ihren Code nicht durcheinander.

In Ihrem list_item.xml (NICHT listView!zuweisen) das Attribut android: onClick wie folgt aus:

<RelativeLayout android:onClick="onClickDoSomething"> 

und dann diese Methode in Ihrer Tätigkeit Aufruf:

public void onClickDoSomething(View view) { 
    // the view is the line you have clicked on 
} 
1

Verwenden setOnItemClickListener() api in Ihrer Tätigkeit. Folgendes ist die Probe.

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 

@Override 
public void onItemClick(AdapterView<> parent, View view, int position, long id) 
{ 
    // your code here. 
} 

}); 
Verwandte Themen