2014-09-17 6 views
5

[अद्यतन] - बस उन सभी को पुष्टि करना चाहता था जो मैं मानता हूं कि यह हमेशा हार्ड कोड संख्या का उपयोग करने का एक बुरा विचार है। मैप्स एपीआई का उपयोग करते समय मेरी जिज्ञासा थी, 1, 2 निरंतर मान क्या है। अगर मुझे R.id.my_current_location_view जैसे कुछ मिले तो मुझे और अधिक आरामदायक महसूस होता।क्या कोई मुझे FindViewById (1) या FindViewById (2) के पीछे जादू समझा सकता है?

मुझे लगता है कि कोड इस प्रश्न और अन्य प्रश्नों में लिखे गए हैं। लोगों को findViewById (1) आदि का उपयोग करने के बारे में कैसे पता है? बनाम findViewById (R.id.something);

Change position of Google Maps API's "My location" button

इस प्रश्न में कुछ गहरी भ्रम हो रहा है। मैं सोच रहा हूं कि जादू संख्याएं क्या देखती हैं ViewById (1) है .. यदि आप लिंक पर क्लिक करते हैं तो आप देखेंगे कि किसी ने MapId (1) मान को मानचित्र पर नहीं दिया है लेकिन किसी भी तरह से लोग माता-पिता को जांचने के बारे में जानते हैं और फिर ViewById (1) और findViewById (2) ..

मैंने वहां सवाल भी पूछा, इसलिए संदर्भ खो जाएगा नहीं, लेकिन ऐसा लगता है कि कोई भी इसे समझा नहीं सकता है।

+0

तो जाहिर है कि यह एक जादू संख्या है। आईडी पदानुक्रमकर्ता से है। और यदि Google Google play सेवाओं में अपनी आईडी को बदलने का निर्णय लेता है तो जिन लोगों के पास यह कोड है, उन्हें भी बदलना होगा, लेकिन मैंने इसे बहुत से स्थानों को देखा है .. – reidisaki

उत्तर

1

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

हालांकि, आईडी का उपयोग करने के लिए प्रश्न का उत्तर देने के लिए, एक विकल्प है कि दृश्य पदानुक्रम को मैन्युअल रूप से पार करने के लिए एंड्रॉइड स्टूडियो डीबगर का उपयोग करके बहुत अधिक अनुमान लगाना और काम की जांच करना है। इसमें बहुत समय लगेगा, इसलिए Hierarchy Viewer का उपयोग करना बहुत आसान तरीका है जो एंड्रॉइड स्टूडियो और एक्लिप्स दोनों में उपलब्ध है।

लेआउट का हिस्सा यह दिखता है कि हम रुचि रखते हैं। मैंने प्रासंगिक भाग दिखाने के लिए पूर्ण लेआउट फसल किया।

enter image description here

अब हम निम्नलिखित कोड को तोड़ने में सक्षम हैं: अपने आईडी के बाद से

View locationButton = ((View) mapView.findViewById(1).getParent()).findViewById(2); 
  1. findViewById(1)LinearLayout (लाल रूपरेखा) वापस आ जाएगी 1.
  2. getParent() वापस आ जाएगी है RelativeLayout जो LinearLayout (ब्लू आउटलाइन) का अभिभावक है।
  3. findViewById(2) दिए गए आईडी के साथ RelativeLayout के बच्चे View को मिलेगा। छवि के आधार पर हम देखते हैं कि ImageView (ग्रीन आउटलाइन) हम चाहते हैं कि वह आईडी है।

इसके आधार पर यह ध्यान दें कि हम सिर्फ mapView.findViewById(2) इस्तेमाल किया जा सकता था ImageView सीधे तक पहुँच प्राप्त हैं तथा अन्य कॉल से बचने के लिए दिलचस्प है।

यह सुनिश्चित नहीं है कि पिछले संस्करणों में यह मामला था लेकिन यह वर्तमान MapFragment का उपयोग करते समय काम करता है। यदि यह पिछले संस्करणों पर काम नहीं करता है तो यह इस बात को साबित करने में मदद करता है कि यह एक बुरा अभ्यास है क्योंकि यह रिलीज़ के बीच बदल सकता है।

0

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

जो भी कोई अंतर नहीं,

+0

मैंने जो लिंक दिया है, उसके मामले में IViewById (1) MyLocation बटन आईडी है। डेवलपर्स को बनाम आर.आईडी.माइलोकेशनबटन IdIfItExists का उपयोग करने के बारे में पता था .. – reidisaki

+0

यदि आपने रनटाइम में कोई दृश्य बनाया है और एक्सएमएल के माध्यम से नहीं, तो आप शायद इसके लिए आईडी की आपूर्ति करेंगे, जैसे setID (1), तो आप कर सकते हैं वापस देखने के लिए findViewById (1) का उपयोग करें। आपके द्वारा पोस्ट किए गए लिंक में, मुझे लगता है कि lib woulb कस्टम आईडी के साथ रन टाइम में विजेट बना रहा है। – Techfist

5

आईडी देखें सिर्फ सकारात्मक, गैर शून्य पूर्णांक हैं।

आप @+id/name सिंटैक्स का उपयोग XML में दृश्य आईडी चुके हैं, तो पूर्णांक R.java में उत्पन्न होता है और आप कोड में R.id.name के रूप में यह उल्लेख करने के लिए की जरूरत है।

आप setId(value) का उपयोग कर कोड में दृश्य आईडी चुके हैं, तो आप जहां आईडी मान अच्छी तरह से एक हार्डकोडेड सकारात्मक, गैर शून्य पूर्णांक हो सकती findViewById(value) के साथ एक पदानुक्रम से कि आईडी के साथ एक दृश्य प्राप्त कर सकते हैं इस तरह के 1 या 2 के रूप में

आम तौर पर कोड लिखते समय, उस तरह जादू संख्या स्थिरांक का उपयोग करने से बचने का प्रयास करें।

+1

ठीक है तो जादू संख्या .. सिर्फ एक जादू संख्या है .. मैं इसे कभी-कभी कोड में देखता हूं, इसलिए यह 'सिर्फ खराब अभ्यास है कि peopel कर रहे हैं। और उन्हें पता होना चाहिए कि आईडी 1 क्या है। – reidisaki

0

आप setId(value) का उपयोग करके दृश्य id पहले सेट करना होगा और फिर आप का उपयोग कर कि id का उपयोग कर findViewById(value)

मिले इस पोस्ट यह पर एक नज़र डालें एक दृश्य प्राप्त कर सकते हैं: Link

setid() के लिए Documentation कहते हैं :

इस दृश्य के लिए पहचानकर्ता सेट करता है। इस दृश्य के पदानुक्रम में पहचानकर्ता को अद्वितीय नहीं होना चाहिए। पहचानकर्ता एक सकारात्मक संख्या होना चाहिए।

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