2011-08-04 14 views
14

क्षमा करें अगर यह सवाल बेवकूफ है, लेकिन मैं जावा सिंटैक्स के चारों ओर अपने सिर को लपेट नहीं सकता .. मैंने सी/सी ++
मुझे पता है कि दृश्य एक वर्ग है जो अच्छा है .. लेकिन मुझे नहीं पता कि View.OnClickListener() एक विधि है।
मुझे शक है जब तक कि यह कोई ऑब्जेक्ट न करे?
मुझे लगता है कि व्यू एक ऐसी कक्षा है जिसमें स्थिर ऑनक्लिक लिस्टनर सदस्य ऑब्जेक्ट है..आज जो मुझे समझ में नहीं आता ..
क्या कुछ बता सकते हैं कि कोड की इस पंक्ति के साथ क्या हो रहा है?देखें। ऑनक्लिक लिस्टनर, विधि या कक्षा?

button1 = (Button) findByView(R.id.button1) ; 
    button1.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 

     } 
    } 

तो इस कोड के साथ क्या हो रहा है?

Button1 xml फ़ाइल में बटन 1 ऑब्जेक्ट का संदर्भ है।

button1 ऑब्जेक्ट में सदस्य ऑब्जेक्ट setOnClickListener है जो मैं अपने नाम से हूं, मुझे लगता है कि बटन या कुछ में कोई ईवेंट प्रारंभ होता है। लेकिन यह View.OnClicListener() ऑब्जेक्ट प्राप्त करता है।

मैं उस से उलझन में हूं .. ऑनक्लिक को एक ऑब्जेक्ट प्राप्त होता है ताकि onClickListener कोई वस्तु ऑब्जेक्ट रिटर्न ऑब्जेक्ट न करे ?? मुझे यह बिल्कुल नहीं मिला।

क्या कोई बता सकता है कि उस पंक्ति में क्या होता है View.onClickListener()new this कहने का यह एक और तरीका है?

उत्तर

21

View.OnClickListener is an interface, आप इसे नहीं है, लेकिन यह का एक नया उदाहरण बनाता

उदाहरण आपके द्वारा बनाए गए anonymous class कि implementsView.OnClickListener की है (new View.OnClickListener() निर्माता के लिए एक कॉल है), कोष्ठक में सही new View.OnClickListener() के तहत

किसी भी वर्ग कि View.OnClickListener लागू करता है तरीकों उस में घोषित लागू करना चाहिए (उदाहरण के लिए onClick)

setOnClickListener सिर्फ आपके द्वारा प्रदान किए गए View.OnClickListener इंस्टेंस के संदर्भ को सहेजता है, और जब कोई बटन क्लिक करता है, तो आपके द्वारा सेट किए गए श्रोता के onClick विधि को कॉल किया जा रहा है।

+14

छोटे जोड़े: 'View.OnClickListener' में' .' द्वारा भ्रमित न हों। यह विधि कॉल के साथ कुछ भी नहीं करता है, 'ऑनक्लिक लिस्टनर' इंटरफ़ेस को कक्षा 'व्यू' के अंदर परिभाषित किया गया है - इसलिए आपको कक्षा के माध्यम से इंटरफ़ेस तक पहुंचना होगा: 'View.OnClickListener'। (आप 'android.view.View.OnClickListener' आयात कर सकते हैं और 'ऑनक्लिक लिस्टनर' के माध्यम से इंटरफ़ेस तक पहुंच सकते हैं, लेकिन मुझे नहीं पता कि यह कुछ एंड्रॉइड कोडिंग सम्मेलनों के खिलाफ है या नहीं) – pmnt

+0

धन्यवाद, मेरे पास स्पष्ट रूप से बहुत सारे जावा सीखने हैं। –

+2

@Elyas Machera - हम – MByD

2

ऑनक्लिक लिस्टनर एक इंटरफ़ेस है। एक इंटरफ़ेस अन्य वर्गों को लागू करने के तरीकों का एक सेट प्रदान करता है। http://download.oracle.com/javase/tutorial/java/concepts/interface.html

आपके पास ऑनक्लिक लिस्टनर का विस्तार करने वाला एक और वर्ग (पसंद और एडाप्टर) हो सकता है, तो आपका एडाप्टर क्लास "ऑनक्लिक (व्यू वी)" विधि जोड़ सकता है, और यह क्लिक ईवेंट को संभालने में भी सक्षम होगा। या आप अपने द्वारा पोस्ट किए गए कोड का उपयोग कर सकते हैं, जहां आप केवल एक अज्ञात वर्ग बनाते हैं, जो ऑनक्लिक लिस्टनर लागू करता है।

-Woody

+0

एमबीडीडी ने एक ही स्पष्ट भाषा में एक ही चीज़ समझाई। – Woody

+0

धन्यवाद, मैं लिंक पढ़ता हूं। तो एक इंटरफेस एक अलग वर्ग की तरह है जिसमें कार्यों की एक सूची होती है जिसे इसे विस्तारित अन्य वर्गों द्वारा कार्यान्वित किया जा सकता है। तो व्यू क्लास ऑनक्लिक लिस्टनर इंटरफ़ेस को बढ़ाती है या क्या यह एक इंटरफ़ेस में एक विधि है? –

+1

इस तरह के बारे में सोचो। व्यू में एक स्थानीय चर है जो कक्षा पर अपेक्षा करता है जो "ऑनक्लिक लिस्टनर" इंटरफ़ेस लागू करता है। जब आप View.set ... विधि को कॉल करते हैं, तो वह उस वैरिएबल को भर देता है जो आपने इसे प्रदान किया है, जो एक कक्षा हो सकती है जो "ऑनक्लिक लिस्टनर" या अज्ञात वर्ग (जो आपके मूल पोस्ट में है) लागू करता है , जब भी दृश्य एक क्लिक को संभालता है, तो वह आपके द्वारा प्रदान की गई कक्षा में ऑनक्लिक फ़ंक्शन को कॉल कर सकता है। किसी के जवाब को अपने प्रश्न के उत्तर के रूप में चिह्नित करना न भूलें (इसके आगे हरे रंग की जांच पर क्लिक करें) – Woody

2

एंड्रॉयड कोड घटना आधारित प्रतिक्रिया के लिए सक्षम है। कोड के ब्लॉक इस प्रकार है:

एक बटन है कि आप सक्रिय लेआउट में शामिल किया है का पता लगाएं, और एक स्थानीय चर के लिए असाइन करें:

button1 = (Button) findByView(R.id.button1); 

बटन के लिए क्लिक पर श्रोता सेट करें। यह एक वर्ग है जिसे बटन किसी ईवेंट को पंजीकृत करते समय बुलाया जाएगा। कक्षा का निर्माण यहां किया गया है, यह अज्ञात है क्योंकि आप इसे एक चर के लिए असाइन नहीं करते हैं, लेकिन एंड्रॉइड संदर्भ का ट्रैक रखेगा।

बटन ईवेंट हमेशा दबाए जाने के कारण होते हैं, इसलिए जब बटन पंजीकृत होता है कि इसे दबाया गया है, तो यह ऑनक्लिक लिस्टनर क्लास को सूचित करेगा कि यहां तक ​​कि हुआ, और दृश्य के रूप में स्वयं को पास कर दिया। onClickListener निर्माण किया है के रूप में: onClick विधि घटना (इस मामले में, एक बटन प्रेस) को संभालने के लिए श्रोता द्वारा किया जाता है

new View.OnClickListener() 
{ 
    public void onClick(View v) 
    { 

    } 
} 

है। तो, आप वह कोड डाल देंगे जिसे आप उस विधि में निष्पादित करना चाहते हैं।

सीधे अपने प्रश्न का उत्तर देने के लिए, onClickListere एक अज्ञात वर्ग है जो ऑनक्लिक विधि को परिभाषित करता है, जो बटन ईवेंट को संभालेगा।

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