सूची की स्थिति मैनेज करना

तीन स्टार वाली रेटिंग का आइकॉन

Jetpack Compose में स्क्रोल की जा सकने वाली सूचियां, जैसे कि LazyColumn और LazyRow, बड़ी मात्रा में डेटा को आसानी से दिखा सकती हैं. हालांकि, कॉन्फ़िगरेशन में बदलाव होने पर, सूची की स्थिति रीसेट हो सकती है. जैसे, डिवाइस को घुमाने पर या फ़ोल्ड किए जा सकने वाले डिवाइस को फ़ोल्ड/अनफ़ोल्ड करने पर. ऐसे में, उपयोगकर्ताओं को अपनी पिछली स्थिति पर वापस जाने के लिए, सूची को फिर से स्क्रोल करना पड़ सकता है.

सबसे सही तरीके

स्क्रोल की जा सकने वाली सूचियों को अपनी स्थिति बनाए रखनी चाहिए. खास तौर पर, स्क्रोल की स्थिति और सूची के हर एलिमेंट की स्थिति (जैसे, टेक्स्ट इनपुट). ऐसा करने से, कॉन्फ़िगरेशन में बदलाव होने पर भी उपयोगकर्ताओं को बेहतर अनुभव मिलता है.

सामग्री

  • rememberLazyListState(): यह एक LazyListState बनाता है और उसे याद रखता है. इसका इस्तेमाल सूची की स्क्रोल की स्थिति को कंट्रोल करने और उसे देखने के लिए किया जाता है. कॉन्फ़िगरेशन में बदलाव होने पर, यह अपने-आप बना रहता है.
  • rememberSaveable: यह कॉन्फ़िगरेशन में बदलाव होने पर, स्थिति की वैल्यू को याद रखता है. यह सूची के हर एलिमेंट की स्थिति (जैसे, टेक्स्ट फ़ील्ड इनपुट) को बनाए रखने में मददगार होता है.

चरण

Jetpack Compose में, स्क्रोल की स्थिति का इस्तेमाल करने पर, सूची की स्क्रोल की स्थिति को बनाए रखने की प्रोसेस अपने-आप पूरी हो जाती है. सूची के हर एलिमेंट की स्थिति को बनाए रखने के लिए, rememberSaveable का इस्तेमाल करें. जैसे, TextField इनपुट.

1. सूची की स्क्रोल की स्थिति बनाए रखना

कॉन्फ़िगरेशन में बदलाव होने पर, सूची की स्क्रोल की स्थिति को सेव करने और उसे वापस लाने के लिए, LazyListState का इस्तेमाल करके rememberLazyListState() बनाएं. इसके बाद, इसे स्क्रोल की जा सकने वाली सूची के state पैरामीटर के तौर पर पास करें. जैसे, LazyColumn.

Compose, स्क्रोल की स्थिति को आपके लिए अपने-आप बनाए रखता है.

2. सूची के हर एलिमेंट की स्थिति बनाए रखना

अगर आपकी सूची में स्टेटफ़ुल एलिमेंट शामिल हैं (उदाहरण के लिए, टेक्स्ट फ़ील्ड वाले आइटम), तो उन एलिमेंट की स्थिति तब मिट सकती है, जब उन्हें स्क्रीन से बाहर स्क्रोल किया जाता है और रीसाइकल किया जाता है. इसके अलावा, कॉन्फ़िगरेशन में बदलाव होने पर भी ऐसा हो सकता है.

हर एलिमेंट की स्थिति को बनाए रखने के लिए, सूची के आइटम के स्कोप में rememberSaveable का इस्तेमाल करें. इससे यह पक्का होता है कि आइटम को फिर से कंपोज़ करने या उसे वापस व्यू में स्क्रोल करने पर, उसकी स्थिति वापस आ जाए.

यहां एक पूरी और कंपाइल की जा सकने वाली प्रोसेस दी गई है. इसमें स्क्रोल की स्थिति और आइटम की स्थिति, दोनों को वापस लाने का तरीका दिखाया गया है:

// Scroll state is automatically saved and restored by rememberLazyListState
val listState = rememberLazyListState()

LazyColumn(state = listState) {
    items(100) { index ->
        // Use rememberSaveable to preserve individual item state (e.g., text input)
        var text by rememberSaveable { mutableStateOf("") }
        TextField(
            value = text,
            onValueChange = { text = it },
            label = { Text("Item $index") }
        )
    }
}

नतीजे

अब आपकी स्क्रोल की जा सकने वाली सूची, अपनी स्क्रोल की स्थिति और सूची में मौजूद हर एलिमेंट की स्थिति को वापस ला सकती है.

अन्य संसाधन