Jetpack Compose में LazyColumn — यह क्या है, गुण और यह कैसे काम करता है

लेखक: IT Sectr प्रकाशित: 2026-06-29 पढ़ने का समय: 11 मिनट

LazyColumn Jetpack Compose में एक composable फ़ंक्शन है जो तत्वों की लेज़ी लोडिंग के साथ वर्टिकल सूचियाँ बनाने के लिए है। Column के विपरीत, LazyColumn केवल स्क्रीन पर दिखाई देने वाले तत्वों को बनाता और कंपोज़ करता है, स्क्रॉल करने पर उन्हें पुनः उपयोग करता है। Google Android Documentation, 2025 के अनुसार, कुशल मेमोरी प्रबंधन के कारण LazyColumn मोबाइल एप्लिकेशन में बड़े डेटा सेट प्रदर्शित करने का प्राथमिक उपकरण है।

मुख्य बातें

  • LazyColumn — लेज़ी लोडिंग के साथ एक वर्टिकल Jetpack Compose सूची जो केवल दृश्य तत्व बनाती है और स्क्रॉल करने पर उन्हें पुनः उपयोग करती है।
  • items सूची तत्व बनाने के लिए डेटा संग्रह और फ़ैक्टरी फ़ंक्शन स्वीकार करता है, जबकि item एकल घटक जोड़ता है।
  • LazyListState स्क्रॉल स्थिति को ट्रैक करता है और animateScrollToItem और scrollToItem के माध्यम से प्रोग्रामेटिक रूप से सूची को नियंत्रित करने की अनुमति देता है।
  • Sticky headers stickyHeader का उपयोग करके स्क्रॉल करने पर सेक्शन हेडर को सूची के शीर्ष पर पिन करते हैं।
  • LazyColumn पुनः उपयोग को अनुकूलित करने के लिए contentType पैरामीटर के माध्यम से विभिन्न तत्व प्रकारों का समर्थन करता है।

Jetpack Compose में LazyColumn क्या है

LazyColumn एक composable फ़ंक्शन है जो लेज़ी लोडिंग के साथ एक वर्टिकल स्क्रॉल करने योग्य सूची लागू करता है। Column के विपरीत जो सभी चाइल्ड तत्वों को एक साथ रेंडर करता है, LazyColumn केवल उन तत्वों को बनाता है जो व्यूपोर्ट में आते हैं।

LazyColumn में लेज़ी लोडिंग तंत्र तत्व पुनः उपयोग पर आधारित है: जब कोई तत्व स्क्रॉल करने पर छिप जाता है, तो उसकी composition और layout को एक नए प्रदर्शित तत्व के लिए पुनः उपयोग किया जा सकता है। यह मेमोरी और CPU समय बचाता है, विशेष रूप से लंबी सूचियों पर।

Android Developers Blog, 2024 के अनुसार, LazyColumn महत्वपूर्ण प्रदर्शन गिरावट के बिना दसियों हज़ार तत्वों की सूचियों को कुशलतापूर्वक संभाल सकता है। LazyColumn में प्रत्येक तत्व के पास एक कुंजी (key) होती है जो Compose को सूची बदलने पर तत्व की स्थिति की पहचान करने और संरक्षित करने में मदद करती है।

LazyColumn का मूल सिग्नेचर

LazyColumn पैरामीटर modifier, state, contentPadding, reverseLayout, verticalArrangement और horizontalAlignment स्वीकार करता है। सामग्री DSL फ़ंक्शन items और item के माध्यम से लैम्ब्डा ब्लॉक में परिभाषित की जाती है।

kotlin
@Composable
fun SimpleLazyColumn() {
    val itemsList = (1..100).toList()
    LazyColumn(
        modifier = Modifier.fillMaxSize(),
        verticalArrangement = Arrangement.spacedBy(8.dp),
        contentPadding = PaddingValues(16.dp)
    ) {
        items(itemsList) { item ->
            Text(text = "आइटम $item")
        }
    }
}

LazyColumn के पैरामीटर: items और item

LazyColumn का DSL ब्लॉक सामग्री जोड़ने के लिए items और item फ़ंक्शन प्रदान करता है। items तत्व बनाने के लिए डेटा संग्रह, एक कुंजी और फ़ैक्टरी फ़ंक्शन स्वीकार करता है। item सूची में एकल स्थिर तत्व जोड़ता है।

itemsIndexed items का एक प्रकार है जो डेटा के अतिरिक्त तत्व इंडेक्स भी पास करता है। यह तब उपयोगी होता है जब आपको अलग गणना के बिना तत्व की स्थिति जानने की आवश्यकता हो। items(size) केवल तत्वों की संख्या और फ़ैक्टरी स्वीकार करता है बिना किसी संग्रह से बंधे।

items में key पैरामीटर प्रत्येक तत्व की विशिष्ट पहचान करता है। Material Design Guidelines, 2025 के अनुसार, कुंजियाँ तत्वों को अपडेट और एनिमेट करते समय प्रदर्शन में सुधार करती हैं, क्योंकि Compose कुंजी द्वारा किसी विशिष्ट तत्व की गति या परिवर्तन को ट्रैक कर सकता है।

विभिन्न तत्व प्रकारों के साथ उदाहरण

contentType के साथ items फ़ंक्शन LazyColumn को विभिन्न प्रकार के तत्वों के पुनः उपयोग को अनुकूलित करने की अनुमति देता है। नीचे दिए गए उदाहरण में एक सूची में सेक्शन हेडर और सामान्य पंक्तियों का उपयोग किया गया है।

kotlin
@Composable
fun MixedItemsList() {
    LazyColumn {
        item {
            Text(
                text = "शीर्षक",
                style = MaterialTheme.typography.headlineMedium
            )
        }
        items(
            items = (1..20).toList(),
            key = { it },
            contentType = { "item" }
        ) { item ->
            Text(text = "पंक्ति $item")
        }
    }
}

LazyListState और स्क्रॉल प्रबंधन

LazyListState LazyColumn की एक स्थिति ऑब्जेक्ट है जो वर्तमान स्क्रॉल स्थिति, पहले दृश्य तत्व और ऑफ़सेट को ट्रैक करता है। इसे rememberLazyListState() के माध्यम से बनाया जा सकता है और LazyColumn के state पैरामीटर में पास किया जा सकता है।

LazyListState किसी विशिष्ट तत्व पर प्रोग्रामेटिक स्क्रॉलिंग के लिए animateScrollToItem और scrollToItem विधियाँ प्रदान करता है। animateScrollToItem एक स्मूथ स्क्रॉल एनिमेशन बनाता है, जबकि scrollToItem तुरंत स्क्रॉल करता है। दोनों विधियों को CompositionContext में coroutine के अंदर कॉल करने की आवश्यकता होती है।

Android Developers, 2024 के अनुसार, LazyListState में layoutInfo भी होता है जो दृश्य तत्वों के बारे में जानकारी प्रदान करता है — उनके इंडेक्स, ऑफ़सेट और आकार। यह एनालिटिक्स, व्यू ट्रैकिंग या अनंत स्क्रॉलिंग लागू करने के लिए उपयोगी है।

प्रोग्रामेटिक स्क्रॉलिंग के साथ उदाहरण

इस उदाहरण में, LazyColumn को LazyListState के माध्यम से नियंत्रित किया जाता है। एक बटन सूची को इंडेक्स 50 वाले तत्व तक स्मूथ एनिमेशन के साथ स्क्रॉल करता है।

kotlin
@Composable
fun ScrollableList() {
    val listState = rememberLazyListState()
    val scope = rememberCoroutineScope()

    Column {
        Button(
            onClick = {
                scope.launch {
                    listState.animateScrollToItem(50)
                }
            }
        ) {
            Text("50 पर स्क्रॉल करें")
        }

        LazyColumn(state = listState) {
            items((1..100).toList()) { item ->
                Text(
                    text = "आइटम $item",
                    modifier = Modifier.padding(8.dp)
                )
            }
        }
    }
}

LazyColumn के प्रदर्शन का अनुकूलन

LazyColumn का प्रमुख प्रदर्शन कारक कुंजियों का सही उपयोग है। प्रत्येक तत्व में key पैरामीटर के माध्यम से एक अद्वितीय स्थिर कुंजी होनी चाहिए। कुंजियों के बिना, Compose डेटा बदलने पर तत्वों को सही ढंग से पुनः उपयोग नहीं कर सकता, जिससे पुनर्संरचना होती है।

contentType LazyColumn को बताता है कि किन तत्वों का layout प्रकार समान है। जब समान contentType वाले दो तत्व रीसाइक्लिंग पूल में प्रवेश करते हैं, तो LazyColumn बिना पुनर्संरचना के उनके layout का पुनः उपयोग कर सकता है। Android Developers Blog, 2024 के अनुसार, contentType विभिन्न तत्व प्रकारों वाली सूचियों में प्रदर्शन में 30–50% सुधार करता है।

LazyColumn के लिए फ़ैक्टरी फ़ंक्शन में अस्थिर पैरामीटर से बचना भी महत्वपूर्ण है। हर बार जब कोई तत्व पैरामीटर बदलता है, Compose उस तत्व को पुनर्संरचित करता है। स्थिर मानों के लिए remember और derivedStateOf का उपयोग पुनर्संरचना की संख्या को कम करता है।

प्रदर्शन कारक तालिका

कारकप्रभावअनुशंसा
कुंजियाँ (key)महत्वपूर्णitems के लिए हमेशा अद्वितीय स्थिर key सेट करें
contentTypeमहत्वपूर्णपुनः उपयोग को अनुकूलित करने के लिए तत्व प्रकार निर्दिष्ट करें
तत्व का आकारमध्यमजहाँ संभव हो निश्चित आकार का उपयोग करें
नेस्टेड सूचियाँमहत्वपूर्णLazyColumn के अंदर LazyColumn से बचें — LazyVerticalGrid का उपयोग करें

LazyColumn में Sticky headers और सेक्शन

stickyHeader LazyColumn का एक DSL फ़ंक्शन है जो स्क्रॉल करने पर सेक्शन हेडर को सूची के शीर्ष पर पिन करता है। जब अगला सेक्शन शीर्ष पर पहुँचता है, तो उसका हेडर वर्तमान हेडर को बदल देता है। यह व्यवहार उपयोगकर्ताओं के लिए संपर्क सूचियों और कैलेंडर से परिचित है।

stickyHeader item के समान एक कुंजी और फ़ैक्टरी फ़ंक्शन स्वीकार करता है। सामान्य item के विपरीत, stickyHeader अपने सेक्शन की सामग्री के माध्यम से स्क्रॉल करते समय दृश्य रहता है। जब कोई सेक्शन पूरी तरह से स्क्रॉल हो जाता है, तो अगले सेक्शन का हेडर पिछले हेडर को बाहर धकेल देता है।

Material Design Guidelines, 2025 के अनुसार, sticky headers लंबी सूचियों में नेविगेशन में सुधार करते हैं और उपयोगकर्ता पर संज्ञानात्मक भार कम करते हैं। sticky header लागू करने के लिए, बस items तत्वों के सापेक्ष सही स्थिति में सेक्शन हेडर को stickyHeader में लपेटें।

kotlin
@Composable
fun SectionedList(sections: Map<String, List<String>>) {
    LazyColumn {
        sections.forEach { (header, items) ->
            stickyHeader {
                Text(
                    text = header,
                    modifier = Modifier.background(Color.White)
                        .padding(16.dp)
                )
            }
            items(items) { item ->
                Text(text = item, modifier = Modifier.padding(8.dp))
            }
        }
    }
}

अक्सर पूछे जाने वाले प्रश्न

Compose में LazyColumn, Column से कैसे अलग है?

Column सभी तत्वों को एक साथ रेंडर करता है और 20–30 तत्वों तक की सूचियों के लिए उपयुक्त है। LazyColumn केवल दृश्य तत्व बनाती है और स्क्रॉल करने पर उन्हें पुनः उपयोग करती है, जिससे आप प्रदर्शन हानि के बिना हजारों तत्वों के साथ काम कर सकते हैं।

LazyColumn तत्वों के बीच विभाजक कैसे जोड़ें?

verticalArrangement पैरामीटर में Arrangement.spacedBy का उपयोग करें या इंडेक्स के माध्यम से विभाजक के साथ items फ़ंक्शन का उपयोग करें। जटिल विभाजकों के लिए, सूची तत्वों के बीच Divider() के साथ एक अलग item जोड़ें।

डेटा बदलने पर LazyColumn को कैसे अपडेट करें?

LazyColumn स्वचालित रूप से पुनर्संरचित होता है जब डेटा संग्रह बदलता है, यदि स्थिर कुंजियों का उपयोग किया जाता है। mutableStateListOf या StateFlow के माध्यम से पता लगाए गए डेटा परिवर्तन केवल बदले हुए तत्वों को फिर से खींचते हैं।

क्या LazyColumn के अंदर LazyColumn को नेस्ट किया जा सकता है?

LazyColumn के अंदर LazyColumn का सीधा नेस्टिंग अनुशंसित नहीं है — दोनों में स्वतंत्र स्क्रॉलिंग है, जो जेस्चर संघर्ष बनाता है। इसके बजाय, स्क्रॉल करने योग्य Section के अंदर LazyColumn के साथ एक सामान्य Column या ग्रिड के लिए LazyVerticalGrid का उपयोग करें।

कैसे पता करें कि LazyColumn अंत तक स्क्रॉल हो गई है?

LazyListState.layoutInfo.visibleItemsInfo का उपयोग करें और अंतिम दृश्य तत्व के इंडेक्स की तुलना कुल तत्वों की संख्या से करें। अनंत स्क्रॉलिंग के लिए, ट्रैक करें कि अंतिम दृश्य तत्व सूची के अंत के कितना करीब है।

सारांश

  • LazyColumn — लेज़ी लोडिंग के साथ एक वर्टिकल सूची जो बड़े डेटा के साथ कुशल कार्य के लिए केवल व्यूपोर्ट में तत्व बनाती और पुनः उपयोग करती है।
  • items और item — कुंजी और contentType समर्थन के साथ LazyColumn में डेटा संग्रह और एकल घटक जोड़ने के लिए DSL फ़ंक्शन।
  • LazyListState स्क्रॉल स्थिति का प्रबंधन करता है, coroutines में animateScrollToItem और scrollToItem के माध्यम से प्रोग्रामेटिक नेविगेशन प्रदान करता है।
  • contentType और key — मुख्य प्रदर्शन अनुकूलन उपकरण, पुनर्संरचना को कम करते हैं और तत्व पुनः उपयोग में सुधार करते हैं।
  • stickyHeader सेक्शन हेडर को सूची के शीर्ष पर पिन करता है, समूहीकृत डेटा वाली लंबी सूचियों में नेविगेशन में सुधार करता है।
  • Arrangement.spacedBy और contentPadding Material Design अनुपालन के लिए LazyColumn के तत्वों और किनारों के बीच रिक्ति का प्रबंधन करते हैं।
  • लेज़ी लोडिंग के साथ क्षैतिज सूचियों के लिए LazyRow का उपयोग करें, और ग्रिड के लिए — LazyVerticalGrid, उसी लेज़ी लोडिंग सिद्धांत का पालन करते हुए।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें