2012-11-21 14 views
21

क्या ऑनक्लिक श्रोता को पकड़ने के लिए द्वितीयक वर्ग बनाना संभव है? गतिविधि वर्ग में नहीं बनाया जा रहा है?एंड्रॉइड - ऑनक्लिक श्रोता एक अलग वर्ग में

मुझे लगता है कि मुख्य गतिविधि वर्ग में ऑनक्लिक श्रोताओं को डालना सिर्फ गन्दा है और मैं उन्हें अलग-अलग वर्गों में रखूंगा। धन्यवाद

+0

यह http://stackoverflow.com/questions/13478526/android-button-navagation-with-onclick-listeners/13478749#13478749 – Ronnie

+0

मैंने पहले यह किया है, लेकिन यह वह नहीं है जिसे मैं ढूंढ रहा हूं। धन्यवाद वैसे भी – Pztar

+0

@Pztar उपयोगकर्तासेवन 7 के लिंक को आपके प्रश्न का उत्तर देना चाहिए। अन्यथा, कृपया अपने प्रश्न को स्पष्ट करें। –

उत्तर

27

निश्चित रूप से, यह संभव है। बस एक कक्षा बनाएं जो View.OnClickListener लागू करती है और इसे श्रोता के रूप में View पर सेट करें। उदाहरण के लिए:

public class ExternalOnClickListener implements View.OnClickListener { 

    public ExternalOnClickListener(...) { 
     // keep references for your onClick logic 
    } 

    @Override public void onClick(View v) { 
     // TODO: add code here 
    } 

} 

और फिर श्रोता के रूप में ऊपर वर्ग का एक उदाहरण सेट:

view.setOnClickListener(new ExternalOnClickListener(...)); 

पैरामिट्रीकृत निर्माता वैकल्पिक है, लेकिन यह बहुत संभव है कि आप वास्तव में बनाने के लिए के माध्यम से कुछ में उत्तीर्ण होना होगा है आपके onClick(...) तर्क पर काम करते हैं।

गुमनाम रूप से कक्षा को कार्यान्वित करना आम तौर पर काम करना आसान है। सिर्फ एक विचार।

+0

धन्यवाद, मुझे यही चाहिए। मैंने इसके साथ शुरुआत की लेकिन मैं पूरी तरह से निर्माता के बारे में भूल गया। – Pztar

+0

ग्रेट उत्तर, धन्यवाद –

+0

यदि आप कक्षा को आंतरिक श्रेणी के रूप में उपयोग करते हैं, तो आपको वह कक्षा ** स्थिर ** – Tobrun

1

आप इसे कर सकते हैं। लेकिन बस सोचें कि आपके पास गतिविधि के संदर्भ नहीं होंगे, न ही इसके सभी विचारों सहित, इसके गुणों के लिए। (जब तक आप उन्हें गेटर्स विधियों के साथ सार्वजनिक या सुलभ बनाते हैं)।

साथ ही, गतिविधि या श्रोताओं के किसी भी सदस्य के संदर्भों को संग्रहीत करने के साथ अतिरिक्त सावधान रहें, क्योंकि वे कचरा कलेक्टर से श्रोता स्मृति को वापस पाने से बच सकते हैं।

+0

आपके पास एक संदर्भ और दृश्य का संदर्भ होगा जो क्लिक किया गया था ...(व्यू विधि getContext()) – Tobrun

10

एक अलग वर्ग में onCLicklistener डालने के बजाय, आप के बाहर onClickListener को परिभाषित करने का प्रयास क्यों नहीं करते ??

उदाहरण के लिए: की तरह इस

onCreate()

yourViewName.setOnClicklistener(listener): 

onCreate बाहर()

private OnClickListener listener = new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

     } 
    }; 
+7

का समर्थन करती है मैं समझता हूं कि आप क्या कहने की कोशिश कर रहे हैं, मुझे पता है कि यह कैसे करें। लेकिन यह वह नहीं है जिसे मैं ढूंढ रहा हूं। मैं इसे मुख्य गतिविधि में नहीं चाहता हूं। धन्यवाद हालांकि – Pztar

+0

क्योंकि यदि आप ऐसा करते हैं तो मुख्य गतिविधि बहुत लंबी और पढ़ने में मुश्किल हो जाती है। इसे एक अलग वर्ग में विभाजित करके मुख्य गतिविधि की लंबाई कम हो सकती है। – hexicle

5

हाँ आप कर सकते हैं। हालांकि, श्रोता बनाने के लिए एक आंतरिक वर्ग का एक फायदा होता है - यह सीधे आपकी गतिविधि कक्षा के फ़ील्ड और चर का उपयोग कर सकता है। आप इसे एक अलग वर्ग बनाने, और आपके श्रोता वास्तव में 5 बार देखा गया का उपयोग करने की आवश्यकता है, तो अपने श्रोता निर्माता इस प्रकार दिखाई देंगे:

MyListener listener = new MyListener(context, button, textView1, textView2, ratingBar, imageView);

कौन सा भी थोड़े भारी है। यदि आपका श्रोता सरल है, तो आगे बढ़ें और इसे एक अलग वर्ग बनाएं। अन्यथा, यह आपके लिए पठनीयता के लिए है।

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