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