2012-03-13 10 views
7

मैं अपने गतिविधि में बटन के बहुत सारे है, मैं निम्नलिखित प्रश्न हैं:क्या हमें ऑनक्लिक लिस्टेनर्स या आंतरिक नामित कक्षाओं के लिए अनाम कक्षाओं का उपयोग करना चाहिए?

  1. मैं प्रत्येक बटन के लिए OnClickListeners के लिए कई भीतरी गुमनाम कक्षाएं बनाने चाहिए, नीचे की तरह:

    private View.OnClickListener mShuffleListener = new View.OnClickListener() { 
        public void onClick(View v) { 
         /// task to do 
        } 
    }; 
    
  2. या चाहिए मैं एक नामित आंतरिक कक्षा के लिए जाता हूं और यह जांचने के लिए एक शर्त शर्त जोड़ता हूं कि कौन सा क्लिक श्रोता कहलाता था।

मेमोरी संसाधनों को सहेजने के लिए कौन सा बेहतर है?

+1

जो कुछ भी आपको उपयुक्त बनाता है !! ... यदि आप एक अच्छी तरह से संरचित कोड चाहते हैं, तो मैं एक नामित आंतरिक वर्ग के लिए जाने का सुझाव दूंगा ... –

उत्तर

7

ज्ञापन संसाधनों को सहेजने के लिए कौन सा अच्छा है?

इससे कोई फर्क नहीं पड़ता। अधिकतर 1 शब्द ... और वह एक स्थिर आंतरिक कक्षा की तुलना एक (गैर स्थैतिक) अज्ञात वर्ग के साथ कर रहा है। यदि आपके पास सैकड़ों इन बटनों के पास है, तो छोटी बचत की बचत कोड पठनीयता/रखरखाव दंड के लायक नहीं है, यहां तक ​​कि (आईएमओ) भी है।

+0

मेरे पास गतिविधि में लगभग 15 बटन हैं, यदि 15 अज्ञात वर्गों को परिभाषित किया गया है तो संदर्भ के लिए स्मृति के 15 * 8 बाइट्स ले जाएंगे, अगर मैं नामित कक्षा के लिए जाता हूं और क्लिकलिस्टर लागू करता हूं, तो यह लगभग 14 * 8 बाइट्स बचाएगा .. क्या कहते हैं? – AAnkit

+3

1) केवल अगर वे 'स्थिर 'हैं। यदि नहीं, तो कोई बचत नहीं है। 2) यह शायद 14 * 4 बाइट्स है। और यह चिंता करने के लिए स्मृति की एक हास्यास्पद छोटी राशि है। 3) यदि आपके पास 64-बिट एंड्रॉइड प्लेटफ़ॉर्म है और इसलिए 8-बाइट संदर्भ हैं, तो यह और भी हास्यास्पद है। –

1

मैं आम तौर पर, एक और अधिक सूक्ष्म दृष्टिकोण है जो कोड आसान जब onClick श्रोता

एक संपत्ति onClick कहा जाता है गुण मेनू में लगभग सभी विजेट्स के लिए (लेआउट एक्सएमएल में भी उपलब्ध है) का उपयोग कर पढ़ा जा सकता है पसंद करते हैं वहाँ आप एक विधि नाम पूर्व xyz

अब अपनी जावा स्रोत फ़ाइल के लिए जाना वहाँ आप बस लिखें विधि पूर्व

public void xyz(View v) 
{ 
//your code goes here 
} 

लिख सकते हैं और आप इसके अलावा किया जाता है यदि आप वास्तव में चाहते हैं का उपयोग आंतरिक CLA एसईएस तब अज्ञात लोगों के साथ जाते हैं यदि स्मृति आपकी चिंता है (संग्रहीत प्रत्येक संदर्भ जावा में स्मृति के 8 बाइट्स लेता है यदि यह एक संदर्भ प्रकार है जो इस मामले में है)।

आशा है कि यह helps..please से पूछें कि आप और अधिक स्पष्टीकरण

+0

मान लीजिए कि मेरे पास 10 बटन हैं, यदि मैं प्रत्येक श्रोता के लिए 10 अज्ञात कक्षाएं बनाउंगा, तो यह होगा 10 नई वस्तुओं को 10 * 8 बाइट्स, बनाएं, लेकिन अगर मैं नामांकित आंतरिक कक्षा के साथ जाता हूं और यह देखने के लिए सभी 10 बटनों की जांच करता हूं कि कौन सा क्लिक किया गया है, तो मैं 9 * 8 बाइट्स बचा सकता हूं। ?? आप इस – AAnkit

+0

पर किसी अन्य चर में संदर्भ संग्रहीत करने के लिए अपने सत्य के बारे में क्या कहते हैं क्योंकि बाद में आप वस्तुओं के संदर्भ संग्रहीत करते हैं और उन संदर्भों को कहीं भी संग्रहीत किया जाना चाहिए। लेकिन वस्तुओं के लिए (10 * 8 गलत धारणा है) आप नहीं कर सकते सुनिश्चित करें कि यह कितनी मेमोरी लेगा क्योंकि इसमें फिर से अन्य संदर्भों के साथ-साथ आदिम प्रकार भी शामिल हो सकते हैं। एक वस्तु में अन्य वस्तुओं को भी शामिल किया जा सकता है। – Nav

1

तीन तरीके घटना को संभालने के लिए कर रहे हैं की क्या ज़रूरत है। कृपया नीचे दिए गए लिंक

http://tseng-blog.nge-web.net/blog/2009/02/14/implementing-listeners-in-your-android-java-application/

पर एक नजर है गुमनाम वर्ग और भीतरी वर्ग

गुमनाम वर्ग के उपयोग पता करने के लिए निम्नलिखित देखें आप अगर

उपयोग गुमनाम इनर क्लासों कोड को कहीं और इस्तेमाल नहीं करना चाहिए (इस वर्ग का उपयोग यहां और कहीं और नहीं किया जा रहा है।)

भीतरी वर्ग

भीतरी वर्ग कोड (यदि केवल वर्ग है कि यह बनाया है निजी बनाया द्वारा) का इस्तेमाल किया जा सकता है। यदि आप एक नामित आंतरिक कक्षा देखते हैं, तो कोई व्यक्ति सोच सकता है कि इसका उपयोग कक्षा में कई स्थानों पर किया जाएगा।

+0

मान लीजिए कि मेरे पास 10 बटन हैं, यदि मैं प्रत्येक श्रोता के लिए 10 अज्ञात वर्ग बना देता हूं, तो यह 10 * 8 बाइट्स 10 नई बाइट्स बनाएगा, लेकिन अगर मैं नामांकित आंतरिक कक्षा के साथ जाता हूं और यह देखने के लिए सभी 10 बटनों की जांच करता हूं कि कौन सा है क्लिक किया गया, मैं 9 * 8 बाइट्स बचा सकता था। ?? आप इस – AAnkit

+0

@ एंकिट पर क्या कहते हैं इस मामले में आप लागू कीवर्ड का उपयोग क्यों नहीं करते हैं। आप इसके बारे में क्या कहते हैं? –

+0

@ एंकिट। मेरी संपादित प्रतिक्रिया पढ़ें। –

1

यदि सभी बटनों में समान कार्यक्षमता होती है जो केवल पैरामीटर में भिन्न होती है, तो यह एक श्रोता बनाने और सभी बटनों को असाइन करना बेहतर होता है।

श्रोता का स्थान उन चर के दायरे पर निर्भर है जो इसे उपयोग करने की आवश्यकता है। यदि इसे कुछ विधि चर का उपयोग करने की आवश्यकता है, तो इसे विधि के अंदर बनाया जाना चाहिए, यदि यह कक्षा के सदस्यों का उपयोग करता है, तो इसे कक्षा के अंदर बनाया जाना चाहिए।

उदाहरण के लिए, यदि आप दस बटन है कि प्रत्येक एक अलग गतिविधि शुरू कर देना चाहिए है, तो आप विचारों और गतिविधियों का एक नक्शा उचित गतिविधि शुरू करने के लिए बना सकते हैं और श्रोता में निधि:

Map<View, Class<?>> viewActivityMap = new HashMap<View, Class<?>>(); 
// fill it somewhere 

// in onCreate 
View.OnClickListener listener = new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Class<?> classToStart = viewActivityMap.get(v); 
     Intent intent = new Intent(YourActivity.this, classToStart); 
     startActivity(intent); 
    } 
} 

button1.setOnClickListener(listener); 
button2.setOnClickListener(listener); 
button3.setOnClickListener(listener); 

मामले में श्रोताओं का, एकमात्र असली कारण जो मैं एक आंतरिक वर्ग बनाने के लिए देखता हूं, यह है कि यदि आप एक कन्स्ट्रक्टर बनाना चाहते हैं जो कार्यान्वित वर्ग/इंटरफेस कन्स्ट्रक्टर से अलग पैरामीटर प्राप्त करता है।

+0

मुझे बटन, पर क्लिक करने के कुछ तरीकों को कॉल करना है, मैं सोच रहा हूं कि एक आंतरिक नामित क्लास क्लिकलिस्टनर लागू करता है और यदि कोई और शर्त है जो जांच करेगी कि कौन सा बटन क्लिक किया गया है। या मुझे प्रत्येक बटन के लिए आंतरिक एनीनी कक्षाएं बनाकर श्रोताओं को बनाने के लिए जाना चाहिए। – AAnkit

+0

यदि कार्यक्षमता अलग है, तो मैं कार्यक्षमता कुछ हद तक समान होने पर अलग-अलग श्रोताओं को एक कार्यान्वयन के साथ अलग-अलग श्रोताओं का निर्माण करूंगा, मैं वही उपयोग करूंगा। – MByD

+0

इसके लिए धन्यवाद, जैसा कि मैं एंड्रॉइड स्रोत में देख सकता हूं वे विभिन्न बटनों के लिए अलग-अलग श्रोताओं को भी बना रहे हैं। – AAnkit

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