Skip to content

Commit 8325a2c

Browse files
committed
Code snippet for Compose doc at https://developer.android.com/quick-guides/content/lazily-load-list?hl=en (lazily load lists).
1 parent 351fcb4 commit 8325a2c

File tree

1 file changed

+56
-4
lines changed

1 file changed

+56
-4
lines changed

compose/snippets/src/main/java/com/example/compose/snippets/lists/LazyListSnippets.kt

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import androidx.compose.foundation.layout.Row
3232
import androidx.compose.foundation.layout.fillMaxSize
3333
import androidx.compose.foundation.layout.fillMaxWidth
3434
import androidx.compose.foundation.layout.height
35+
import androidx.compose.foundation.layout.padding
3536
import androidx.compose.foundation.layout.size
3637
import androidx.compose.foundation.layout.wrapContentHeight
3738
import androidx.compose.foundation.lazy.LazyColumn
@@ -47,6 +48,8 @@ import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells
4748
import androidx.compose.foundation.lazy.staggeredgrid.items
4849
import androidx.compose.foundation.rememberScrollState
4950
import androidx.compose.foundation.verticalScroll
51+
import androidx.compose.material3.Card
52+
import androidx.compose.material3.CircularProgressIndicator
5053
import androidx.compose.material3.Text
5154
import androidx.compose.runtime.Composable
5255
import androidx.compose.runtime.LaunchedEffect
@@ -67,11 +70,12 @@ import androidx.paging.compose.itemKey
6770
import coil.compose.AsyncImage
6871
import coil.compose.rememberAsyncImagePainter
6972
import com.example.compose.snippets.util.randomSampleImageUrl
70-
import kotlin.random.Random
7173
import kotlinx.coroutines.flow.distinctUntilChanged
7274
import kotlinx.coroutines.flow.filter
7375
import kotlinx.coroutines.flow.map
7476
import kotlinx.coroutines.launch
77+
import org.w3c.dom.Text
78+
import kotlin.random.Random
7579

7680
private object ListsSnippetsColumn {
7781
// [START android_compose_layouts_list_column]
@@ -644,7 +648,9 @@ fun LazyStaggeredGridSnippet() {
644648
model = photo,
645649
contentScale = ContentScale.Crop,
646650
contentDescription = null,
647-
modifier = Modifier.fillMaxWidth().wrapContentHeight()
651+
modifier = Modifier
652+
.fillMaxWidth()
653+
.wrapContentHeight()
648654
)
649655
}
650656
},
@@ -666,15 +672,17 @@ fun LazyStaggeredGridSnippetFixed() {
666672
model = photo,
667673
contentScale = ContentScale.Crop,
668674
contentDescription = null,
669-
modifier = Modifier.fillMaxWidth().wrapContentHeight()
675+
modifier = Modifier
676+
.fillMaxWidth()
677+
.wrapContentHeight()
670678
)
671679
}
672680
},
673681
modifier = Modifier.fillMaxSize()
674682
)
675683
// [END android_compose_layouts_lazy_staggered_grid_fixed]
676684
}
677-
private class Message(val id: Long)
685+
class Message(val id: Long)
678686
private class Item
679687

680688
private data class Contact(val firstName: String)
@@ -742,3 +750,47 @@ private val randomSizedPhotos = listOf(
742750
randomSampleImageUrl(width = 1600, height = 900),
743751
randomSampleImageUrl(width = 500, height = 500),
744752
)
753+
// [START android_compose_layouts_lazily_load_list]
754+
@Composable
755+
fun MessageList(pager: Pager<Int, Message>) {
756+
val lazyPagingItems = pager.flow.collectAsLazyPagingItems()
757+
758+
LazyColumn {
759+
items(
760+
lazyPagingItems.itemCount,
761+
key = lazyPagingItems.itemKey { it.id }
762+
) { index ->
763+
val message = lazyPagingItems[index]
764+
if (message != null) {
765+
MessageRow(message)
766+
} else {
767+
MessagePlaceholder()
768+
}
769+
}
770+
}
771+
772+
@Composable
773+
fun MessagePlaceholder() {
774+
Box(
775+
Modifier
776+
.fillMaxWidth()
777+
.height(48.dp)
778+
) {
779+
CircularProgressIndicator()
780+
}
781+
}
782+
783+
@Composable
784+
fun MessageRow(message: Text) {
785+
Card(modifier = Modifier.padding(8.dp)) {
786+
Column(
787+
modifier = Modifier.padding(8.dp),
788+
verticalArrangement = Arrangement.Center
789+
) {
790+
// Text(message.sender), where "message" is an object with a sender property
791+
// Text(message.text), where "text" is an object with a text property
792+
}
793+
}
794+
}
795+
}
796+
// [END android_compose_layouts_lazily_load_list]

0 commit comments

Comments
 (0)