Android'de ListView Tıklaması Nasıl Ele Alınır?


141

ListView'da click olayını nasıl dinlerim?

Şimdi sahip olduğum şey bu

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

Aşağıdakileri yaptığımda

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

   public void onNothingSelected(AdapterView parentView) {  

   }  
});  

Tıklandığında hiçbir şey yapmıyor gibi görünüyor.
Ve tüm bu kodlar Etkinlik'i genişleten bir sınıf içinde yaşar.

Yanıtlar:


182

Liste görünümünüzde şunu kullanın: setOnItemClickListener


Teşekkürler David. Geezzz, setOnClickListener ve setOnItemSelectedListener'ı denedim ama setOnItemClickListener okumasını kaçırdım. Teşekkürler, Tee
teepusink

teepusink ile aynı şeyi yaptım: D
Shereef Marzouk

Daha sonra bu ayrıntılı görünüme nasıl veri gönderirsiniz? (Bir videoya tıklayarak youtube gibi)
Sauron

İlk olarak, sınıf tıklama dinleyicisini uygular: OnItemClickListener uygular Sonra ListView yourList.setOnItemclickListener (bu) bir dinleyici ayarlayın; Ve son olarak, clic yöntemini oluşturun: @IIClClick (PublicView)? Toast.LENGTH_SHORT)) (.Show; }
bourax webmaster

88

ListView nesnesinin lv olduğunu varsayalım, aşağıdakileri yapın:

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
lviçeriden erişilemez onItemClick. Bunu aşmanın güzel bir yolu nedir?
shinjin

1
@shinjin Son yap. final ListView lv = (ListView) findViewById(R.id.your_list_view);
Lekensteyn

Temiz yol:Object o = ((ListView)arg0).getItemAtPosition(position);
JimmyB


42

Bağdaştırıcı sınıfı getView () yönteminizde şişirilmiş görünümü "Tıklanabilir" ve "tıklama olaylarını dinleyebilmeniz" ayarlamanız gerekir.

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

ve ListActivity'nizdeki tıklama dinleyicisini aşağıdaki gibi beyan edin,

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

Bu, yalnızca BaseAdapter öğesini genişleterek Bağdaştırıcıyı özelleştirirken geçerlidir.

Daha fazla bilgi için ANDROID_SDK / samples / ApiDemos / src / com / example / android / apis / view / List14.java'ya bakın.


teşekkürler Vijay Ben şişirilmiş görünümde tıklama sorunu ile karşı karşıya ben cevabınızdan çözmek var
dhaiwat

Ancak bu, hangi öğenin tıklandığını belirlemez, bu da bir liste için az ya da çok işe yaramaz olmasını sağlar mı? Doğru?
çiftlik devekuşu

dönüştürmek için etiketi ayarlayabilirsiniz onClick .. de aynı kontrol edin hangi öğeyi tıklatıldığında etiket tanımlanabilir ...
Vijay C

Adaptörünüzdeki bir setOnClickListener referansını saklamak ve onClick (View v) yönteminde çağırmaktan daha şık bir çözüm buldum. etkinlik olayı konumuyla alabilir.
jocelyn

OnClick yönteminiz yanlış. OnItemClick (AdapterView <?> Üst, Görünüm görünümü, int konumu, uzun kimlik) olmalıdır
IgorGanapolsky

17

Benimkinden önceki iki cevap doğrudur - kullanabilirsiniz OnItemClickListener.

Bu nota iyi arasındaki fark olduğunu OnItemClickListenerve OnItemSelectedListenerince sondaj sırasında madde seçimi ve odak dokunmatik modu ile ilgili olarak, aslında önemli olduğunu AdapterView.

Varsayılan olarak, dokunmatik modda seçim ve odak yoktur. Konuyla ilgili daha fazla bilgi için buraya bakabilirsiniz .


8

Bu çözüm gerçekten minimalisttir ve kodunuzu bozmaz.

Senin içinde list_item.xml (! DEĞİL ListView) atamak nitelik android: onClick böyle:

<RelativeLayout android:onClick="onClickDoSomething">

ve sonra etkinliğinizde şu yöntemi çağırın:

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

iyi bir çözüm, ancak tıklanan öğenin konumunu almanın bir yolu yok
Bilal Şimşek

@ BilalŞimşek Uzun bir süredir Android dışındayım ama eğer viewmeta verisi olabilirse, pozisyonu almanın yolu bu olabilir.
Amio.io

6

setOnItemClickListenerBirini kullanmak zorundasın dedi.
Kod şöyle olmalıdır:

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

İlk olarak, sınıf tıklama dinleyicisini uygulamalıdır:

implements OnItemClickListener

Sonra bir dinleyiciyi ListView'a ayarlayın

yourList.setOnItemclickListener(this);

Ve son olarak, clic yöntemini oluşturun:

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

buradan kodu inceleyebilir ve indirebilirsiniz


3

Etkinliğinizde setOnItemClickListener () api kullanın. Aşağıdaki örnek.

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

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

});

1

Kotlin'de listenize bir dinleyici ekleyinJava kadar basit

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

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

 }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.