यह कोडलैब Android Kotlin के बुनियादी कोर्स में शामिल है. अगर आप कोडलैब के क्रम में काम करते हैं, तो आपको इस कोर्स का ज़्यादा से ज़्यादा फ़ायदा मिलेगा. सभी कोर्स कोडलैब Android Kotlin से जुड़े बेसिक कोडलैब के लैंडिंग पेज पर दिए गए हैं.
परिचय
RecyclerView
की मुख्य खूबियों में से एक यह है कि अपने लेआउट रणनीति को कंट्रोल करने और उसमें बदलाव करने के लिए, आपको लेआउट मैनेजर का इस्तेमाल करने की सुविधा देता है. LayoutManager
RecyclerView
में आइटम को व्यवस्थित करने का तरीका मैनेज करता है.
सामान्य इस्तेमाल के मामलों के लिए RecyclerView
, बॉक्स से बाहर के लेआउट मैनेजर के साथ आता है. उदाहरण के लिए, आप हॉरिज़ॉन्टल और वर्टिकल सूचियों के लिए LinearLayout
या ग्रिड के लिए GridLayout
का इस्तेमाल कर सकते हैं. ज़्यादा जटिल इस्तेमाल के मामलों में, आपको एक कस्टम LayoutManager
लागू करना होगा.
इस कोडलैब में आप सूची के बजाय ग्रिड लेआउट का इस्तेमाल करके डेटा दिखाने का तरीका जानेंगे. यह तरीका पिछले कोडलैब के स्लीप मोड ट्रैकर ऐप्लिकेशन पर काम करेगा. (अगर आपके पास पिछले कोडलैब से ऐप्लिकेशन नहीं है, तो आप इस कोडलैब के लिए स्टार्टर कोड डाउनलोड कर सकते हैं.)
आपको क्या पता होना चाहिए
आपको इनके बारे में पता होना चाहिए:
Activity
,Fragments
, औरViews
का इस्तेमाल करके, बुनियादी यूज़र इंटरफ़ेस बनाना- फ़्रैगमेंट के बीच नेविगेट करना और फ़्रैगमेंट के बीच डेटा पास करने के लिए,
safeArgs
का इस्तेमाल करना - मॉडल देखें, मॉडल फ़ैक्ट्री और ट्रांसफ़ॉर्मेशन देखें
LiveData
और उनके ऑब्ज़र्वरRoom
डेटाबेस बनाने, डीएओ बनाने, और इकाइयों के बारे में बताने का तरीका- डेटाबेस टास्क और लंबे समय तक चलने वाले अन्य टास्क के लिए कोरूटीन इस्तेमाल करने का तरीका
Adapter
,ViewHolder
, और आइटम लेआउट के साथ बेसिक बेसिकRecyclerView
को लागू करने का तरीकाRecyclerView
के लिए, डेटा बाइंडिंग लागू करने का तरीका- डेटा बदलने के लिए बाइंडिंग अडैप्टर बनाने और इस्तेमाल करने का तरीका
आप इन चीज़ों के बारे में जानेंगे
- अपने डेटा को
RecyclerView
में दिखाने का तरीका बदलने के लिए, किसी दूसरेLayoutManager
का इस्तेमाल करने का तरीका - अपनी नींद से जुड़े डेटा के लिए, ग्रिड लेआउट कैसे बनाएँ
आप क्या कर पाएंगे!
- इस सीरीज़ के पिछले कोडलैब से स्लीप-ट्रैकर ऐप्लिकेशन पर बनाएं.
- ऐप्लिकेशन में
RecyclerView
के ज़रिए दिखाए गए नींद से जुड़े डेटा की सूची को नींद से जुड़े डेटा की ग्रिड में बदलें.
स्लीप-ट्रैकर ऐप्लिकेशन में, फ़्रैगमेंट से दिखने वाली दो स्क्रीन होती हैं. जैसा कि नीचे दी गई इमेज में दिखाया गया है.
बाईं ओर दिखाई गई पहली स्क्रीन पर, ट्रैकिंग शुरू और बंद करने के लिए बटन दिए गए हैं. स्क्रीन पर उपयोगकर्ता के सोने के कुछ डेटा की जानकारी दिखती है. हटाएं बटन, उपयोगकर्ता के लिए ऐप्लिकेशन के ज़रिए इकट्ठा किया गया सारा डेटा हमेशा के लिए मिटा देता है. दाईं ओर दिखाई गई दूसरी स्क्रीन, अच्छी क्वालिटी वाली रेटिंग चुनने के लिए है.
यह ऐप्लिकेशन, यूज़र इंटरफ़ेस (यूआई) कंट्रोलर, व्यू मॉडल, और LiveData
के साथ आसान आर्किटेक्चर का इस्तेमाल करता है. इससे Room
की नींद से जुड़े डेटा का इस्तेमाल जारी रहता है.
नींद का डेटा RecyclerView
में दिखेगा. इस कोडलैब में आप GridLayout
इस्तेमाल करने के लिए ऐप्लिकेशन बदल सकते हैं. फ़ाइनल स्क्रीन, नीचे दिए गए स्क्रीनशॉट की तरह दिखेगी.
पिछले कोडलैब में, जब आपने fragment_sleep_tracker.xml
में RecyclerView
जोड़ा, तो आपने बिना किसी कस्टमाइज़ेशन के LinearLayoutManager
जोड़ा. यह कोड डेटा को वर्टिकल सूची के रूप में दिखाता है.
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
LinearLayoutManager
, RecyclerView
के लिए सबसे आम और सादगी भरा लेआउट मैनेजर है. यह चाइल्ड व्यू के हॉरिज़ॉन्टल और वर्टिकल, दोनों प्लेसमेंट के साथ काम करता है. उदाहरण के लिए, आप LinearLayoutManager
का इस्तेमाल करके इमेज का कैरसेल बना सकते हैं जिसे उपयोगकर्ता हॉरिज़ॉन्टल रूप से स्क्रोल करता है.
ग्रिड लेआउट
इस्तेमाल करने के एक और सामान्य तरीके में, उपयोगकर्ता को बहुत ज़्यादा डेटा दिखाना ज़रूरी है. हालांकि, आप GridLayout
का इस्तेमाल करके ऐसा कर सकते हैं. जैसा कि नीचे दिखाया गया है, RecyclerView
के लिए GridLayoutManager
डेटा को स्क्रोल करने लायक ग्रिड के तौर पर दिखाता है.
डिज़ाइन के हिसाब से, उन सूचियों के लिए GridLayout
सबसे अच्छा है जिन्हें आइकॉन या इमेज के तौर पर दिखाया जा सकता है, जैसे कि फ़ोटो ब्राउज़िंग ऐप्लिकेशन की सूचियां. स्लीप-ट्रैकर ऐप्लिकेशन में, आप हर रात सोने के समय को बड़े आइकॉन की ग्रिड के तौर पर दिखा सकते हैं. यह डिज़ाइन, उपयोगकर्ता को एक नज़र में आपकी नींद की क्वालिटी की खास जानकारी देगा.
GridLayout आइटम को कैसे लेआउट करता है
GridLayout
, आइटम को लाइन और कॉलम के ग्रिड में व्यवस्थित करता है. यह मानते हुए कि वर्टिकल स्क्रोलिंग, डिफ़ॉल्ट रूप से पंक्ति में मौजूद हर आइटम को एक "span.&kot; (इस मामले में, एक स्पैन एक कॉलम की चौड़ाई के बराबर ही है.)
नीचे दिए गए पहले दो उदाहरणों में, हर पंक्ति तीन स्पैन से बनी होती है. डिफ़ॉल्ट रूप से, GridLayoutManager
हर आइटम को एक स्पैन में, स्पैन की संख्या तक बताता है, जो आप तय करते हैं. जब यह स्पैन की संख्या तक पहुंच जाता है, तब इसे अगली लाइन में रैप कर दिया जाता है.
डिफ़ॉल्ट रूप से हर आइटम को एक स्पैन की ज़रूरत पड़ती है. हालांकि, आप एक आइटम को बड़ा करके देख सकते हैं कि उसे कितने स्पैन वाले हैं. उदाहरण के लिए, सबसे दाईं ओर दी गई स्क्रीन के सबसे ऊपर वाले आइटम में तीन समय लगते हैं.
इस टास्क में, आप पिछली कसरत को पूरा करने वाले RecyclerView
को लेते हैं और GridLayoutManager
का इस्तेमाल करके डेटा दिखाने के लिए उसे अपडेट करते हैं. आप पिछले कोडलैब से स्लीप ट्रैकर ऐप्लिकेशन का इस्तेमाल जारी रख सकते हैं या GitHub से RecyclerViewGridLayout-Starter ऐप्लिकेशन को डाउनलोड कर सकते हैं.
पहला चरण: LayoutManager बदलना
- अगर ज़रूरी हो, तो GitHub से इस कोडलैब के लिए, RecyclerViewGridLayout-Starter ऐप्लिकेशन को डाउनलोड करें और प्रोजेक्ट को Android Studio में खोलें.
fragment_sleep_tracker.xml
लेआउट फ़ाइल खोलें.sleep_list
RecyclerView
डेफ़िनिशन से लेआउट मैनेजर हटाएं.
हटाया जाने वाला कोड:
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager
SleepTrackerFragment.kt
खोलें.OnCreateView()
में,return
स्टेटमेंट से ठीक पहले, तीन स्पैन के साथ एक नया वर्टिकल, सबसे ऊपर से नीचेGridLayoutManager
बनाएं.GridLayoutManager
कंस्ट्रक्टर चार आर्ग्युमेंट का इस्तेमाल करता है: एक संदर्भ, जोactivity
है, संख्या (स्पैन, डिफ़ॉल्ट वर्टिकल लेआउट में), एक ओरिएंटेशन (डिफ़ॉल्ट वर्टिकल है) और क्या इसका रिवर्स लेआउट (डिफ़ॉल्ट रूप सेfalse
है).
val manager = GridLayoutManager(activity, 3)
- लाइन के नीचे,
RecyclerView
को इसGridLayoutManager
का इस्तेमाल करने के लिए कहें.RecyclerView
बाइंडिंग ऑब्जेक्ट में है और उसेsleepList
कहा जाता है. (fragment_sleep_tracker.xml
देखें.)
binding.sleepList.layoutManager = manager
दूसरा चरण: लेआउट बदलना
list_item_sleep_night.xml
में मौजूदा लेआउट हर रात की पूरी पंक्ति का इस्तेमाल करके डेटा दिखाता है. इस चरण में, ग्रिड के लिए एक ज़्यादा छोटा स्क्वेयर आइटम लेआउट तय किया जाता है.
list_item_sleep_night.xml
खोलें.sleep_length
केTextView
को मिटाएं, क्योंकि इसके नए डिज़ाइन की ज़रूरत नहीं है.quality_string
TextView
को दूसरी जगह ले जाएं, ताकि यहImageView
के नीचे दिखे. ऐसा करने के लिए, आपको कुछ चीज़ें अपडेट करनी होंगी.quality_string
TextView
का फ़ाइनल लेआउट यहां दिया गया है:
<TextView
android:id="@+id/quality_string"
android:layout_width="0dp"
android:layout_height="20dp"
android:textAlignment="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/quality_image"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/quality_image"
app:layout_constraintTop_toBottomOf="@+id/quality_image"
tools:text="Excellent!!!"
app:sleepQualityString="@{sleep}" />
- डिज़ाइन व्यू में पुष्टि करें कि
quality_string
TextView
,ImageView
के नीचे रखा गया है.
आपने डेटा बाइंडिंग का इस्तेमाल किया है, इसलिए आपको Adapter
में कुछ भी नहीं बदलना है. कोड सिर्फ़ काम करना चाहिए. आपकी सूची ग्रिड के तौर पर दिखेगी.
- ऐप्लिकेशन चलाएं और देखें कि ग्रिड में नींद का डेटा कैसे दिखता है.
ध्यान दें किConstraintLayout
अब भी पूरी चौड़ाई लेता है.GridLayoutManager
, स्पैन के आधार पर आपके व्यू को तय चौड़ाई देता है.GridLayoutManager
ग्रिड को लेआउट करते समय, खाली सफ़ेद जगह या क्लिपिंग आइटम जोड़ते समय, सभी कंस्ट्रेंट को पूरा करने की पूरी कोशिश करता है.
SleepTrackerFragment
में,GridLayoutManager
बनाने वाले कोड में,GridLayoutManger
के स्पैन की संख्या बदलकर 1 करें. ऐप्लिकेशन चलाने पर आपको एक सूची दिखेगी.
val manager = GridLayoutManager(activity, 1)
GridLayoutManager
के लिए स्पैन की संख्या 10 बदलें और ऐप्लिकेशन चलाएं. ध्यान दें किGridLayoutManager
लगातार एक साथ 10 आइटम में फ़िट हो जाएगा, लेकिन अब आइटम क्लिप किए गए हैं.- स्पैन संख्या को 5 और निर्देश को
GridLayoutManager.VERTICAL
में बदलें. ऐप्लिकेशन चलाएं और देखें कि आप हॉरिज़ॉन्टल रूप से कैसे स्क्रोल कर सकते हैं. इसे अलग दिखाने के लिए, आपको किसी अलग लेआउट की ज़रूरत होगी.
val manager = GridLayoutManager(activity, 5, GridLayoutManager.HORIZONTAL, false)
- स्पैन संख्या को 3 पर और वर्टिकल को ओरिएंटेशन पर सेट करना न भूलें!
Android Studio प्रोजेक्ट: RecyclerViewGridLayout
- लेआउट मैनेजर यह मैनेज करते हैं कि
RecyclerView
में आइटम किस तरह व्यवस्थित किए जाएं. RecyclerView
सामान्य बॉक्स के लिए बॉक्स में लेआउट मैनेजर के साथ काम करता है, जैसे कि हॉरिज़ॉन्टल और वर्टिकल सूचियों के लिएLinearLayout
और ग्रिड के लिएGridLayout
.- ज़्यादा जटिल इस्तेमाल के उदाहरणों के लिए, कस्टम
LayoutManager
लागू करें. - डिज़ाइन के हिसाब से,
GridLayout
का इस्तेमाल उन आइटम की सूचियों के लिए सबसे अच्छा होता है जिन्हें आइकॉन या इमेज के तौर पर दिखाया जा सकता है. GridLayout
, आइटम को लाइन और कॉलम के ग्रिड में व्यवस्थित करता है. मान लें कि वर्टिकल स्क्रोलिंग में पंक्ति वाला हर आइटम &&30;;- आप पसंद के मुताबिक लेआउट मैनेजर की ज़रूरत के बिना, किसी आइटम के शुरू होने की अवधि को पसंद के मुताबिक बदलकर, ज़्यादा दिलचस्प ग्रिड बना सकते हैं.
- ग्रिड में एक आइटम के लिए एक आइटम लेआउट बनाएं और लेआउट मैनेजर आइटम को व्यवस्थित करने का काम कर लेता है.
- आप
RecyclerView
के लिएLayoutManager
को, एक्सएमएल लेआउट फ़ाइल में<RecyclerView>
एलिमेंट वाले या प्रोग्राम के हिसाब से सेट कर सकते हैं.
Udcity कोर्स:
Android डेवलपर दस्तावेज़:
इस सेक्शन में उन छात्र-छात्राओं के लिए गृहकार्य की असाइनमेंट की सूची दी गई है जो इस कोडलैब के ज़रिए एक शिक्षक की देखरेख में कोर्स में काम कर रहे हैं. यह क्रिएटर का काम #33 पर निर्भर करता है:
- अगर ज़रूरी हो, तो होमवर्क असाइन करें.
- छात्र-छात्राओं को होमवर्क के असाइनमेंट सबमिट करने के तरीके के बारे में बताएं.
- होमवर्क असाइनमेंट को ग्रेड दें.
शिक्षक इन सुझावों का इस्तेमाल जितनी चाहें उतनी कम या ज़्यादा कर सकते हैं. साथ ही, उन्हें अपने हिसाब से कोई भी होमवर्क असाइन करना चाहिए.
अगर आप इस कोडलैब के ज़रिए खुद काम कर रहे हैं, तो बेझिझक इन होमवर्क असाइनमेंट का इस्तेमाल करें.
इन सवालों के जवाब दें
पहला सवाल
Android की ओर से, इनमें से कौनसे लेआउट मैनेजर दिए गए हैं? लागू होने वाले सभी विकल्प चुनें.
▢ LinearLayouManager
▢ GridLayoutManager
▢ CircularLayoutManager
▢ StaggeredGridLayoutManager
दूसरा सवाल
&कोटेशन क्या है?
▢ GridLayoutManager
ने ग्रिड का आकार बनाया है.
▢ ग्रिड में किसी कॉलम की चौड़ाई.
▢ ग्रिड में किसी आइटम के डाइमेंशन.
▢ ग्रिड में उन कॉलम की संख्या जिनमें वर्टिकल ओरिएंटेशन है.
अगला लेसन शुरू करें: