5

मैं OnItemClickListener को ListView गतिशील रूप से बदलने में सक्षम होना चाहता हूं। हालांकि, API इस बारे में स्पष्ट नहीं है कि यह स्वीकार्य है या नहीं, और न ही यदि मैं करता हूं तो परिणाम क्या होगा।क्या एकाधिक कक्षाओं से setOnClickListener को कॉल करना परिणामस्वरूप केवल एक कॉलबैक होता है?

मुझे यह पसंद है कि अगर मैं एक वर्ग से listView.setOnItemClickListener() पर कॉल करता हूं, और फिर बाद में एक अलग वर्ग से कॉल करता हूं, तो केवल हाल ही की कक्षा को कॉलबैक मिल जाता है।

यह प्रश्न आकस्मिक रूप से SetOnClickListener() पर भी लागू हो सकता है।

एपीआई इस तरह से व्यवहार करने के लिए लागू किया जा सकता है, लेकिन इसके बजाय इसे लागू किया जा सकता है कि setOnItemClickListener नामक सभी कक्षाएं कॉलबैक प्राप्त करें।

एंड्रॉइड एपीआई द्वारा वास्तव में कौन सा व्यवहार लागू किया जाता है?

उत्तर

9

चेक बाहर AdapterView.setOnItemClickListener() स्रोत कोड here:

/** 
* Register a callback to be invoked when an item in this AdapterView has 
* been clicked. 
* 
* @param listener The callback that will be invoked. 
*/ 
public void setOnItemClickListener(OnItemClickListener listener) { 
    mOnItemClickListener = listener; 
} 

जावा दुनिया में, आम तौर पर एक सेटर विधि पिछले मान फ्लश और नए मूल्य के लिए वस्तु के उदाहरण चर सेट हो जाएगा। तो जिस व्यवहार के बारे में आप बात कर रहे हैं वह केवल हाल ही की क्लास कॉलबैक प्राप्त करता है।


यह बजाय इस तरह लागू किया जा सकता है कि सभी वर्गों कि setOnItemClickListener कॉलबैक मिलता है कहा जाता है।

जावा दुनिया में, यह भी संभव addOnItemClickListener() है, जो और अधिक विशेष रूप है,/श्रोता की दुकान की एक सूची का उपयोग भीतर गुणा श्रोताओं का प्रबंधन है, इस मामले में, एक अच्छा OOP अभ्यास के रूप में, हम आम तौर पर इसे नाम वास्तविक कार्यान्वयन ऐसा नहीं है कि AdapterView.setOnItemClickListener() को API में कार्यान्वित किया गया है।

+0

प्रश्न उठाने के बाद, मैंने एक श्रोता बनाम श्रोताओं को जोड़ने के नामकरण में भेदभाव के बारे में सोचा था, और यह अनुमान लगाया गया कि अगर यह मेरी अपेक्षा की गई थी तो यह एक गलत नामक होगा। ऐसा लगता है कि जावा-विशिष्ट सम्मेलन की तुलना में मानव भाषा अर्थपूर्ण है। मुझे लगता है कि मैंने एपीआई दस्तावेज में इसे निर्दिष्ट करने के लिए बस कुछ पढ़ने की उम्मीद की है। स्पष्टीकरण के लिए धन्यवाद। –

4

आप जितनी बार चाहें setOnItemClickListener() पर निःशुल्क हैं, केवल हाल ही में OnItemClickListener का उपयोग किया जाएगा।

0
String className = "MyOnClickListener"; 
obj = (OnClickListenerInterface)(Class.forName(className).newInstance()); 

आप श्रोता के लिए एक इंटरफेस बनाना पड़ेगा, लेकिन आप अलग clasess में अलग श्रोता लागू कर सकते हैं, और फिर कहा जाता है उनमें से हर एक गतिशील पसंद इस कोड भाग में दिखाया गया है।

संबंधित मुद्दे