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 birLazyListStateoluş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.