Jetpack Compose में स्क्रोल की जा सकने वाली सूचियां, जैसे कि LazyColumn और LazyRow,
ज़्यादा डेटा को बेहतर तरीके से दिखा सकती हैं. हालांकि, कॉन्फ़िगरेशन में बदलाव होने पर, सूची की स्थिति रीसेट हो सकती है. जैसे, डिवाइस को घुमाने या फ़ोल्ड किए जा सकने वाले डिवाइस को फ़ोल्ड/अनफ़ोल्ड करने पर. इससे उपयोगकर्ताओं को अपनी पिछली पोज़िशन पर जाने के लिए, फिर से स्क्रोल करना पड़ता है.
सबसे सही तरीके
स्क्रोल की जा सकने वाली सूचियों को अपनी स्थिति बनाए रखनी चाहिए. खास तौर पर, स्क्रोल की पोज़िशन और सूची के अलग-अलग एलिमेंट (जैसे, टेक्स्ट इनपुट) की स्थिति को कॉन्फ़िगरेशन में होने वाले सभी बदलावों के दौरान बनाए रखना चाहिए, ताकि उपयोगकर्ता को बेहतर अनुभव मिल सके.
सामग्री
rememberLazyListState(): यहLazyListStateको बनाता है और याद रखता है. इसका इस्तेमाल, सूची की स्क्रोल पोज़िशन को कंट्रोल करने और उसे देखने के लिए किया जाता है. यह कॉन्फ़िगरेशन में होने वाले बदलावों के दौरान, अपने-आप सेव हो जाता है.rememberSaveable: यह कॉन्फ़िगरेशन में बदलाव होने पर भी स्टेट वैल्यू को याद रखता है. यह सूची के अलग-अलग एलिमेंट की स्टेट को सुरक्षित रखने के लिए काम आता है. जैसे, टेक्स्ट फ़ील्ड के इनपुट.
चरण
Jetpack Compose में, स्क्रोल की स्थिति का इस्तेमाल करने पर, सूची की स्क्रोल पोज़िशन को सेव करने की प्रोसेस अपने-आप मैनेज हो जाती है. सूची के अलग-अलग और जटिल एलिमेंट (जैसे, TextField इनपुट) की स्थिति को बनाए रखने के लिए, rememberSaveable का इस्तेमाल करें.
1. सूची की स्क्रोल स्थिति को सेव रखना
कॉन्फ़िगरेशन में बदलाव होने पर, अपनी सूची की स्क्रोल पोज़िशन को सेव और पहले जैसा करने के लिए, rememberLazyListState() का इस्तेमाल करके LazyListState बनाएं. इसके बाद, इसे स्क्रोल की जा सकने वाली सूची के 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") } ) } }
नतीजे
स्क्रोल की जा सकने वाली सूची, अब स्क्रोल की पोज़िशन और सूची में मौजूद हर एलिमेंट की स्थिति को पहले जैसा कर सकती है.