Cara menangani klik ListView di Android

141

Bagaimana cara mendengarkan acara klik pada ListView?

Inilah yang saya miliki sekarang

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

Ketika saya melakukan hal berikut

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

   public void onNothingSelected(AdapterView parentView) {  

   }  
});  

Tampaknya tidak melakukan apa-apa saat klik.
Dan semua kode itu hidup dalam kelas yang memperluas Activity.

teepusink
sumber

Jawaban:

182

Pada tampilan daftar Anda, gunakan setOnItemClickListener

David Hedlund
sumber
Terima kasih David. Ya ampun, saya mencoba setOnClickListener dan setOnItemSelectedListener tetapi tidak membaca setOnItemClickListener. Terima kasih, Tee
teepusink
saya melakukan hal yang sama seperti teepusink: D
Shereef Marzouk
Bagaimana cara Anda mengirim data ke tampilan terperinci itu? (Seperti youtube mengklik melalui video)
Sauron
Pertama, kelas harus mengimplementasikan pendengar klik: mengimplementasikan OnItemClickListener Kemudian atur pendengar ke ListView yourList.setOnItemclickListener (ini); Dan akhirnya, buat metode klik: @Override public void onItemClick (orangtua AdaptorViewView? Toast.LENGTH_SHORT) .show (); }
bourax webmaster
88

Misalkan objek ListView adalah lv, lakukan hal berikut-

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
    */  
  }
});
Aditya Mehta
sumber
1
lvtidak dapat diakses di dalam onItemClick. Apa cara yang bagus untuk menyiasatinya?
shinjin
1
@shinjin Jadikan final. final ListView lv = (ListView) findViewById(R.id.your_list_view);
Lekensteyn
Cara bersih:Object o = ((ListView)arg0).getItemAtPosition(position);
JimmyB
Berikut ini tautan ke dokumentasi: developer.android.com/reference/android/widget/…
trinity420
42

Anda perlu mengatur tampilan yang meningkat "Dapat Diklik" dan "dapat mendengarkan acara klik" dalam metode getView () kelas adaptor Anda.

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

dan nyatakan pendengar klik di ListActivity Anda sebagai berikut,

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

Ini berlaku hanya ketika Anda mengkustomisasi Adaptor dengan memperluas BaseAdapter.

Rujuk ANDROID_SDK / samples / ApiDemos / src / com / example / android / apis / view / List14.java untuk detail lebih lanjut

Vijay C
sumber
terima kasih Vijay saya telah menghadapi masalah klik pada tampilan mengembang saya telah memecahkan dari jawaban Anda
dhaiwat
Tetapi ini tidak menentukan item apa yang diklik, yang membuatnya lebih atau kurang berguna untuk daftar? Benar?
Burung unta pertanian
Anda dapat mengatur tag untuk convertView dan memeriksa yang sama di onClick .. menggunakan tag item mana yang diklik dapat diidentifikasi ...
Vijay C
Saya telah menemukan solusi yang lebih elegan daripada sebuah tag di adaptor Anda menyimpan referensi setOnClickListener dan menyebutnya pada metode onClick (View v). maka aktivitas dapat menerima acara dengan posisi.
jocelyn
Metode onClick Anda salah. Seharusnya onItemClick (induk AdapterView <?>, Tampilan tampilan, posisi int, id panjang)
IgorGanapolsky
17

Dua jawaban sebelum saya benar - Anda dapat menggunakan OnItemClickListener.

Baik untuk dicatat bahwa perbedaan antara OnItemClickListenerdan OnItemSelectedListener, meskipun terdengar halus, sebenarnya penting, karena pemilihan dan fokus item terkait dengan mode sentuh Anda AdapterView.

Secara default, dalam mode sentuh, tidak ada pilihan dan fokus. Anda dapat melihat di sini untuk info lebih lanjut tentang masalah ini.

Dimitar Dimitrov
sumber
8

Solusi ini sangat minimalis dan tidak mengacaukan kode Anda.

Di list_item.xml Anda (BUKAN listView!) Tentukan atribut android: onClick seperti ini:

<RelativeLayout android:onClick="onClickDoSomething">

dan kemudian dalam aktivitas Anda panggil metode ini:

public void onClickDoSomething(View view) {
   // the view is the line you have clicked on
}
Amio.io
sumber
solusi bagus tetapi, tidak ada cara untuk mendapatkan posisi item diklik
Bilal Şimşek
@ BilalŞimşek Untuk waktu yang lama saya sudah keluar dari Android tetapi jika viewdapat memiliki beberapa metadata, itu bisa menjadi cara bagaimana mendapatkan posisi.
Amio.io
6

Anda harus menggunakan setOnItemClickListenerseseorang berkata.
Kode harus seperti ini:

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

Pertama, kelas harus mengimplementasikan pendengar klik:

implements OnItemClickListener

Kemudian atur pendengar ke ListView

yourList.setOnItemclickListener(this);

Dan akhirnya, buat metode clic:

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

Anda dapat melihatnya dan mengunduh kode di sini

webmaster bourax
sumber
3

Gunakan api setOnItemClickListener () di aktivitas Anda. Berikut ini adalah sampelnya.

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

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

});
Amey Haldankar
sumber
1

Di Kotlin, tambahkan pendengar ke listView Anda sesederhana java

your_listview.setOnItemClickListener { parent, view, position, id ->   

    Toast.makeText(this, position, Toast.LENGTH_SHORT).show()

 }
Allen
sumber