Liste durumu yönetimi

Üç yıldız puanı simgesi

Jetpack Compose'daki LazyColumn ve LazyRow gibi kaydırılabilir listeler, büyük miktarda veriyi verimli bir şekilde görüntüleyebilir. Ancak cihazın döndürülmesi veya katlanabilir bir cihazın katlanması/açılması gibi yapılandırma değişiklikleri, listenin durumunu sıfırlayarak kullanıcıları tekrar önceki konumlarına kaydırmaya zorlayabilir.

En iyi uygulamalar

Kaydırılabilir listeler, sorunsuz bir kullanıcı deneyimi sunmak için tüm yapılandırma değişiklikleri sırasında durumlarını (özellikle kaydırma konumunu) ve her bir liste öğesinin durumunu (metin girişleri gibi) korumalıdır.

Malzemeler

  • rememberLazyListState(): Listenin kaydırma konumunu kontrol etmek ve gözlemlemek için kullanılan bir LazyListState oluşturur ve hatırlar. Yapılandırma değişiklikleri boyunca otomatik olarak kalıcı olur.
  • rememberSaveable: Yapılandırma değişiklikleri sırasında durum değerini hatırlar. Bu, bağımsız liste öğesi durumlarını (metin alanı girişleri gibi) korumak için kullanışlıdır.

Adımlar

Jetpack Compose'da, kaydırma durumu kullandığınızda listenin kaydırma konumunu koruma işlemi otomatik olarak gerçekleştirilir. Bağımsız, karmaşık liste öğelerinin (ör. TextField girişleri) durumunu korumak için rememberSaveable kullanın.

1. Liste kaydırma durumunu koruma

Yapılandırma değişiklikleri sırasında listenizin kaydırma konumunu kaydedip geri yüklemek için rememberLazyListState() kullanarak bir LazyListState oluşturun ve bunu, kaydırılabilir listenizin (ör. LazyColumn) state parametresi olarak iletin.

Compose, kaydırma konumunu sizin için otomatik olarak korur.

2. Bağımsız liste öğesi durumunu koruma

Listeniz durum bilgisi içeren öğeler (ör. metin alanları içeren öğeler) içeriyorsa bu öğelerin durumu, ekran dışına kaydırılıp geri dönüştürüldüğünde veya yapılandırma değişiklikleri sırasında kaybolabilir.

Bağımsız öğe durumunu korumak için liste öğesi kapsamı içinde rememberSaveable kullanın. Bu sayede, öğe yeniden oluşturulduğunda veya tekrar görünüme kaydırıldığında durumu geri yüklenir.

Hem kaydırma durumunun hem de öğe durumunun geri yüklenmesini gösteren eksiksiz ve derlenebilir bir uygulama aşağıda verilmiştir:

// 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") }
        )
    }
}

Sonuçlar

Kaydırılabilir listeniz artık kaydırma konumunu ve listedeki her öğenin durumunu geri yükleyebilir.

Ek kaynaklar