Android में ListView क्लिक को कैसे हैंडल करें


141

मैं सूची दृश्य पर क्लिक करने के लिए कैसे सुनूं?

मेरे पास अब यही है

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

जब मैं निम्नलिखित करता हूं

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

   public void onNothingSelected(AdapterView parentView) {  

   }  
});  

यह क्लिक पर कुछ भी करने के लिए प्रतीत नहीं होता है।
और उन सभी कोड एक वर्ग के भीतर रहते हैं जो गतिविधि का विस्तार करते हैं।

जवाबों:


182

अपनी सूची दृश्य पर, उपयोग करें setOnItemClickListener


धन्यवाद डेविड। Geezzz, मैंने setOnClickListener और setOnItemSelectedListener की कोशिश की, लेकिन setOnItemClickListener को पढ़ने से चूक गया। धन्यवाद, टी
टीप्सिंक

मैंने टेपेसिंक के समान ही किया: डी
शेरिफ मार्जुक

फिर आप उस विस्तृत दृश्य में डेटा कैसे भेजते हैं? (एक वीडियो के माध्यम से क्लिक करने वाले यूट्यूब की तरह)
सौरोन

सबसे पहले, वर्ग को क्लिक श्रोता को लागू करना चाहिए: OnItemClickListener को लागू करता है फिर एक श्रोता को ListView yourList.setOnItemclickListener (यह) पर सेट करें; और अंत में, क्लिक विधि बनाएं: @Override public void onItemClick (AdapterView <?> माता-पिता, दृश्य देखें, int स्थिति, लंबी आईडी) {Toast.makeText (MainActivity.this, "आप" + देशों [+ स्थिति] पर क्लिक करते हैं) Toast.LENGTH_SHORT) .show (); }
बुकेक्स वेबमास्टर

88

मान लें कि ListView ऑब्जेक्ट Lv है, तो निम्न करें-

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अंदर पहुंच योग्य नहीं है onItemClick। उस के आसपास पाने का एक अच्छा तरीका क्या है?
शिंजिन

1
@ शिनजिन इसे अंतिम रूप दें। final ListView lv = (ListView) findViewById(R.id.your_list_view);
लेकेनस्टाइन

साफ तरीका:Object o = ((ListView)arg0).getItemAtPosition(position);
जिमीबी

यहाँ प्रलेखन के लिए लिंक है: developer.android.com/reference/android/widget/…
trinity420

42

आपको अपने एडॉप्टर वर्ग getView () विधि में "क्लिक करने योग्य" और "घटनाओं को सुनने में सक्षम" के लिए फुलाए गए दृश्य सेट करने की आवश्यकता है।

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

और अपने श्रोता को क्लिक श्रोता घोषित करें।

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

यह तभी सही है जब आप बेस एडेप्टर का विस्तार करके एडेप्टर को अनुकूलित कर रहे हैं।

अधिक जानकारी के लिए ANDROID_SDK / नमूने / ApiDemos / src / com / example / android / apis / view / List14.java देखें


धन्यवाद विजय मेरे पास फुलाए जाने पर क्लिक करने की समस्या है जिसे मैंने आपके उत्तर से हल किया है
dhaiwat

लेकिन यह निर्धारित नहीं करता है कि किस आइटम पर क्लिक किया जा रहा है, जो इसे सूची के लिए अधिक-या-कम बेकार बना देता है? सही बात?
फार्म शुतुरमुर्ग

आप कन्वर्ट करने के लिए टैग सेट कर सकते हैं और उसी पर चेक कर सकते हैं क्लिक करें .. टैग का उपयोग करके किस आइटम पर क्लिक किया जा सकता है ...
विजय सी।

मुझे आपके एडेप्टर स्टोर में टैग से अधिक सुरुचिपूर्ण समाधान सेटऑनक्लिक लिस्टनर संदर्भ मिला है और इसे ऑनक्लिक (देखें v) विधि पर कॉल करें। तब गतिविधि स्थिति के साथ घटना को पुनः प्राप्त कर सकती है।
जोसेलिन

आपका ऑनक्लिक तरीका गलत है। यह onItemClick (AdapterView <?> माता-पिता, दृश्य देखें, int स्थिति, लंबी आईडी) होना चाहिए
IgGanapolsky

17

मेरा दो उत्तर सही होने से पहले - आप उपयोग कर सकते हैं OnItemClickListener

यह नोट करना अच्छा है कि सूक्ष्म ध्वनि करते समय OnItemClickListenerऔर OnItemSelectedListener, के बीच का अंतर वास्तव में महत्वपूर्ण है, क्योंकि आइटम चयन और फोकस आपके टच मोड से संबंधित हैं AdapterView

डिफ़ॉल्ट रूप से, टच मोड में, कोई चयन और फ़ोकस नहीं है। आप इस विषय पर अधिक जानकारी के लिए यहां एक नज़र डाल सकते हैं ।


8

यह समाधान वास्तव में न्यूनतर है और आपके कोड को गड़बड़ नहीं करता है।

अपनी list_item.xml में (सूची नहीं देखें!) विशेषता Android असाइन करें: इस तरह क्लिक करें:

<RelativeLayout android:onClick="onClickDoSomething">

और फिर अपनी गतिविधि में इस विधि को कॉल करें:

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

अच्छा समाधान लेकिन, आइटम क्लिक की स्थिति प्राप्त करने का कोई तरीका नहीं है
बिलाल Febimşek

@ Bilal beenimşek लंबे समय से मैं एंड्रॉइड से बाहर रहा हूं लेकिन अगर viewकुछ मेटाडेटा हो सकता है, तो यह तरीका हो सकता है कि स्थिति कैसे प्राप्त करें।
Amio.io

6

आपको setOnItemClickListenerकिसी ने कहा उपयोग करना है।
कोड इस तरह होना चाहिए:

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

सबसे पहले, वर्ग को क्लिक श्रोता को लागू करना चाहिए:

implements OnItemClickListener

फिर एक श्रोता को ListView पर सेट करें

yourList.setOnItemclickListener(this);

और अंत में, क्लिक विधि बनाएं:

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

आप एक बार देख और डाउनलोड कोड ले जा सकते हैं यहां


3

अपनी गतिविधि में setOnItemClickListener () एपीआई का उपयोग करें। निम्नलिखित नमूना है।

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

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

});

1

कोटलिन में, अपने श्रोता के लिए श्रोता को जावा के समान सरल जोड़ें

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

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

 }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.