Jetpack Compose-এ স্ক্রল করা যায় এমন তালিকা, যেমন LazyColumn এবং LazyRow,
দক্ষতার সাথে প্রচুর পরিমাণে ডেটা দেখাতে পারে। তবে, কনফিগারেশন পরিবর্তন,
যেমন ডিভাইস ঘোরানো বা ফোল্ডেবল ডিভাইস ফোল্ড/আনফোল্ড করা, তালিকার
অবস্থা রিসেট করতে পারে, যার ফলে ব্যবহারকারীদের আবার তাদের আগের অবস্থানে স্ক্রল করতে বাধ্য করে।
পেশাদার পদ্ধতি
ব্যবহারকারীকে নির্বিঘ্ন অভিজ্ঞতা প্রদান করতে, স্ক্রল করা যায় এমন তালিকা, কনফিগারেশন সংক্রান্ত সব পরিবর্তনের সময়, নিজের অবস্থা—বিশেষ করে স্ক্রল পজিশন—এবং তালিকার স্বতন্ত্র এলিমেন্টের (যেমন, টেক্সট ইনপুট) অবস্থা বজায় রাখবে।
উপাদান
rememberLazyListState(): একটিLazyListStateতৈরি করে এবং মনে রাখে যা তালিকার স্ক্রল পজিশন নিয়ন্ত্রণ এবং পর্যবেক্ষণ করতে ব্যবহৃত হয়। এটি কনফিগারেশন পরিবর্তন জুড়ে অটোমেটিক থেকে যায়।rememberSaveable: কনফিগারেশন পরিবর্তন জুড়ে স্টেট ভ্যালু মনে রাখে, ব্যক্তিগত তালিকা এলিমেন্ট স্টেট (যেমন টেক্সট ফিল্ড ইনপুট) সংরক্ষণ করার জন্য উপযোগী।
ধাপ
Jetpack Compose-এ, আপনি স্ক্রল স্টেট ব্যবহার করলে তালিকার স্ক্রল পজিশন অটোমেটিক
ম্যানেজ করা হয়। আলাদা আলাদা, জটিল তালিকা এলিমেন্টের (যেমন TextField ইনপুট)
স্টেট বজায় রাখতে, rememberSaveable ব্যবহার করুন।
১. তালিকা স্ক্রল করার স্ট্যাটাস প্রিজার্ভ করুন
কনফিগারেশন পরিবর্তন জুড়ে আপনার তালিকার স্ক্রল পজিশন সেভ ও রিস্টোর করতে, rememberLazyListState() ব্যবহার করে একটি LazyListState তৈরি করুন এবং
এটি আপনার স্ক্রল করা যায় এমন তালিকার state প্যারামিটার হিসেবে পাস করুন, যেমন LazyColumn।
Compose আপনার জন্য স্ক্রল পজিশন অটোমেটিক সেভ করে রাখে।
২. তালিকার প্রতিটি এলিমেন্টের স্ট্যাটাস বজায় রাখুন
আপনার তালিকায় স্টেটফুল এলিমেন্ট (যেমন, টেক্সট ফিল্ড সহ আইটেম) থাকলে, সেগুলি স্ক্রিনের বাইরে স্ক্রল করে রিসাইকেল করা হলে অথবা কনফিগারেশন পরিবর্তন করার সময় সেইসব স্বতন্ত্র এলিমেন্টের স্টেট হারিয়ে যেতে পারে।
প্রত্যেকটি এলিমেন্টের স্ট্যাটাস বজায় রাখতে, তালিকার আইটেম স্কোপের মধ্যে
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") } ) } }
ফলাফল
আপনার স্ক্রল করা যায় এমন তালিকা এখন তার স্ক্রল পজিশন এবং তালিকার প্রতিটি এলিমেন্টের স্ট্যাটাস রিস্টোর করতে পারবে।