তালিকা স্টেট ম্যানেজমেন্ট

থ্রি স্টার রেটিং আইকন

Jetpack Compose-এ স্ক্রল করা যায় এমন তালিকা, যেমন LazyColumn ও LazyRow, প্রচুর পরিমাণে ডেটা দক্ষতার সাথে দেখাতে পারে। তবে, কনফিগারেশনে পরিবর্তন, যেমন ডিভাইস রোটেট করা বা ফোল্ড করা যায় এমন ডিভাইস ফোল্ড/আনফোল্ড করা, তালিকার স্টেট রিসেট করতে পারে, যার ফলে ব্যবহারকারীদের আবার তাদের আগের পজিশনে স্ক্রল করতে হয়।

পেশাদার পদ্ধতি

স্ক্রল করা যায় এমন তালিকাগুলিকে তাদের অবস্থা—বিশেষ করে, স্ক্রল পজিশন—এবং তাদের স্বতন্ত্র তালিকা এলিমেন্টের (যেমন, টেক্সট ইনপুট) অবস্থা বজায় রাখতে হবে যাতে কনফিগারেশনে কোনও পরিবর্তন হলেও ব্যবহারকারী যেন নির্বিঘ্নে অভিজ্ঞতা পান।

উপাদান

  • rememberLazyListState(): একটি LazyListState তৈরি করে ও মনে রাখে যা তালিকাটির স্ক্রল পজিশন কন্ট্রোল ও পর্যবেক্ষণ করতে ব্যবহার করা হয়। কনফিগারেশনে পরিবর্তন করা হলেও এটি অটোমেটিক থেকে যায়।
  • rememberSaveable: কনফিগারেশন পরিবর্তন জুড়ে স্টেট ভ্যালু মনে রাখে, স্বতন্ত্র তালিকা এলিমেন্ট স্টেট (যেমন, টেক্সট ফিল্ড ইনপুট) সেভ করার জন্য উপযোগী।

ধাপ

Jetpack Compose-এ, আপনি স্ক্রল স্টেট ব্যবহার করলে, কোনও তালিকার স্ক্রল পজিশন সেভ করার কাজটি অটোমেটিক ম্যানেজ করা হয়। স্বতন্ত্র, জটিল তালিকা এলিমেন্টের (যেমন TextField ইনপুট) অবস্থা বজায় রাখতে, rememberSaveable ব্যবহার করুন।

১. তালিকার স্ক্রল করার স্টেট সেভ করা

কনফিগারেশন পরিবর্তন জুড়ে আপনার তালিকার স্ক্রল পজিশন সেভ ও রিস্টোর করতে, rememberLazyListState() ব্যবহার করে একটি LazyListState তৈরি করুন এবং এটিকে আপনার স্ক্রল করা যায় এমন তালিকার state প্যারামিটার হিসেবে পাস করুন, যেমন LazyColumn।

কম্পোজ উইন্ডো আপনার জন্য স্ক্রল পজিশন অটোমেটিক সেভ করে রাখে।

২. তালিকার প্রতিটি এলিমেন্টের স্টেট বজায় রাখা

আপনার তালিকায় স্টেটফুল এলিমেন্ট (যেমন, টেক্সট ফিল্ড সহ আইটেম) থাকলে, সেগুলি স্ক্রল করে স্ক্রিনের বাইরে নিয়ে গেলে এবং রিসাইকেল করলে অথবা কনফিগারেশনে পরিবর্তন করলে, সেইসব স্বতন্ত্র এলিমেন্টের স্টেট হারিয়ে যেতে পারে।

আলাদা আলাদা এলিমেন্টের স্টেট সেভ করতে, লিস্ট আইটেম স্কোপের মধ্যে 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") }
        )
    }
}

ফলাফল

আপনার স্ক্রল করা যায় এমন তালিকা এখন তার স্ক্রল পজিশন এবং তালিকার প্রতিটি এলিমেন্টের স্ট্যাটাস রিস্টোর করতে পারবে।

অতিরিক্ত রিসোর্স