Skip to content

Commit 9736dd8

Browse files
authored
Merge pull request #350 from android/lazily-load-list
Lazily load list
2 parents 028e503 + 4b1c549 commit 9736dd8

File tree

1 file changed

+54
-1
lines changed

1 file changed

+54
-1
lines changed

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

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import androidx.compose.foundation.layout.Row
3333
import androidx.compose.foundation.layout.fillMaxSize
3434
import androidx.compose.foundation.layout.fillMaxWidth
3535
import androidx.compose.foundation.layout.height
36+
import androidx.compose.foundation.layout.padding
3637
import androidx.compose.foundation.layout.size
3738
import androidx.compose.foundation.layout.width
3839
import androidx.compose.foundation.layout.wrapContentHeight
@@ -52,6 +53,8 @@ import androidx.compose.foundation.lazy.staggeredgrid.items
5253
import androidx.compose.foundation.rememberScrollState
5354
import androidx.compose.foundation.verticalScroll
5455
import androidx.compose.material3.Button
56+
import androidx.compose.material3.Card
57+
import androidx.compose.material3.CircularProgressIndicator
5558
import androidx.compose.material3.Text
5659
import androidx.compose.runtime.Composable
5760
import androidx.compose.runtime.LaunchedEffect
@@ -78,6 +81,7 @@ import kotlinx.coroutines.flow.distinctUntilChanged
7881
import kotlinx.coroutines.flow.filter
7982
import kotlinx.coroutines.flow.map
8083
import kotlinx.coroutines.launch
84+
import org.w3c.dom.Text
8185

8286
private object ListsSnippetsColumn {
8387
// [START android_compose_layouts_list_column]
@@ -684,7 +688,7 @@ fun LazyStaggeredGridSnippetFixed() {
684688
)
685689
// [END android_compose_layouts_lazy_staggered_grid_fixed]
686690
}
687-
private class Message(val id: Long)
691+
class Message(val id: Long, val sender: String, val text: String)
688692
private class Item
689693

690694
private data class Contact(val firstName: String)
@@ -752,6 +756,55 @@ private val randomSizedPhotos = listOf(
752756
randomSampleImageUrl(width = 1600, height = 900),
753757
randomSampleImageUrl(width = 500, height = 500),
754758
)
759+
// [START android_compose_layouts_lazily_load_list]
760+
@Composable
761+
fun MessageList(
762+
modifier: Modifier,
763+
pager: Pager<Int, Message>
764+
) {
765+
val lazyPagingItems = pager.flow.collectAsLazyPagingItems()
766+
767+
LazyColumn {
768+
items(
769+
lazyPagingItems.itemCount,
770+
key = lazyPagingItems.itemKey { it.id }
771+
) { index ->
772+
val message = lazyPagingItems[index]
773+
if (message != null) {
774+
MessageRow(message)
775+
} else {
776+
MessagePlaceholder()
777+
}
778+
}
779+
}
780+
@Composable
781+
fun MessagePlaceholder(modifier: Modifier) {
782+
Box(
783+
Modifier
784+
.fillMaxWidth()
785+
.height(48.dp)
786+
) {
787+
CircularProgressIndicator()
788+
}
789+
}
790+
791+
@Composable
792+
fun MessageRow(
793+
modifier: Modifier,
794+
message: Message
795+
) {
796+
Card(modifier = Modifier.padding(8.dp)) {
797+
Column(
798+
modifier = Modifier.padding(8.dp),
799+
verticalArrangement = Arrangement.Center
800+
) {
801+
Text(message.sender)
802+
Text(message.text)
803+
}
804+
}
805+
}
806+
}
807+
// [END android_compose_layouts_lazily_load_list]
755808

756809
// [START android_compose_lists_snap_scroll_button]
757810
@Composable

0 commit comments

Comments
 (0)