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

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

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

نتایج

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

منابع بیشتر