مدیریت وضعیت فهرست

نماد رده‌بندی سه ستاره

فهرست‌های پیمایش‌پذیر در 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") }
        )
    }
}

نتایج

اکنون فهرست پیمایش‌شدنی شما می‌تواند موقعیت پیمایش و وضعیت هر عنصر در فهرست را بازیابی کند.

منابع بیشتر