2017-04-26 10 views
5

का उपयोग करके मैं आईडी आईडी नाम सम्मेलन क्या अच्छा है findViewById का उपयोग करने से बच सकता हूं, लेकिन मुझे यकीन नहीं है कि इसका उपयोग करने के लिए आईडी को कैसे नामित किया जाए।कोटलिन एंड्रॉइड एक्सटेंशन

मैंने पाया दो विकल्प हैं: आईडी के लिए

  1. उपयोग साधारण नाम लेकिन फिर मैं एस्प्रेसो के साथ मुसीबत में पड़ सकते हैं अगर मैं टुकड़े के साथ उपयोग करें:

android.support .test.espresso.AmbiguousViewMatcherException: 'आईडी के साथ: .../mainLayout' पदानुक्रम में कई विचारों से मेल खाता है।

यह इसलिए क्योंकि मैं एक ही आईडी के साथ एक TabLayout अंदर दो टुकड़े है:

<LinearLayout android:id="@+id/mainLayout" 
  1. मालिक के साथ नाम: "@+id/loginMainLayout" और "@+id/signUpMainLayout"

लेकिन तो मुझे signUpMainLayout.doSomething() जैसे चर का उपयोग करना होगा।

नोट: मुझे इस मामले में _ का उपयोग पसंद नहीं है क्योंकि यह code style अच्छा नहीं है।

अन्य विकल्प क्या हैं?

+0

मुझे '_' का उपयोग न करने का कारण नहीं दिख रहा है? आपकी रेफ कोड शैली जावा के लिए है, लेकिन हमारी लेआउट फ़ाइल xml –

+1

@TrungLe कोटलिन एक्सटेंशन के साथ है, वे दृश्यों को संदर्भित करने के लिए आपके आईडी के नाम के साथ एक्सटेंशन फ़ंक्शन बनाते हैं, इसलिए कोड 'username_textfield.text = "से भरा होगा "और यह पूरी तरह से जावा/कोटलिन कोड शैलियों से बाहर दिखता है। – Caipivara

उत्तर

2

मुझे पहचान नहीं है कि "@+id/loginMainLayout" और "@+id/signUpMainLayout" का उपयोग क्यों नहीं करते हैं जब नाम lowerCamelCase में है जो कोटलिन और जावा में आम है। जैसा कि आपने कहा था उपयोग का उपयोग signUpMainLayout.doSomething() होगा।

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

fragment_contacts में:

<TextView id="+id/contactNameText 
android:text="John Smith" .../> 

<ImageView id="+id/contactUserImage .../> 

ज़ोर: वहाँ contactUserImage में Image क्योंकि यह एक imageView है पता करने के लिए है।

fragment_settings में

:

<TextView id="+id/settingsNotificationText 
android:text="Turn notifications on/off" .../> 

<checkBox id="+id/settingsNotificationCheck .../> 
+1

मुझे इस विचार के बारे में क्या पसंद नहीं है कि कोड उन चरों का उपयोग करने के लिए बहुत बड़ा हो गया है, अपने विशेषज्ञों के लिए 'गतिविधि_expert_profile' जैसे दृश्य के बारे में सोचें जो "विशेषज्ञ" हैं (आप दूसरों के लिए गतिविधि_normal_profile' रह सकते हैं), फिर एक उपयोगकर्ता नाम टेक्स्ट व्यू को 'expertProfileUserNameTextView' कहा जा सकता है, क्योंकि आप देख सकते हैं कि वेरिएबल नाम अल्ट्रा बिग है, यही वह है जो मुझे इसके बारे में बुरा महसूस करता है। – Caipivara

2
मेरे मामले में

, मैं इस सम्मेलन https://jeroenmols.com/blog/2016/03/07/resourcenaming/, का उपयोग कर काम कर रहा है लेकिन अंडरस्कोर के बिना और ऊंट मामले सम्मेलन में।

यदि आप एंड्रॉइड स्टूडियो के भीतर किसी दृश्य को नियंत्रण खींचते हैं, तो यह ऊंट केस सम्मेलन का उपयोग करके आईडी को नाम देता है।

और हालांकि चर के नाम थोड़ा बड़े हो सकते हैं, आप चर के घोषणापत्र में हमेशा वैल या var का उपयोग कर सकते हैं।