그룹 Jetpack Compose의 LazyColumn 및 Paging3

제목과 같다.일이 꼬여서 10분도 안 돼서 필기를 해줬어요.
※ 필요한 정보는 공식.와 같이 Paging3과 연계하여 작성하면 자신이 잊어버릴 때 편리하므로 작성해야 합니다.

완성 화면



로 표시됩니다.

gradle


def paging_version = "3.0.1"
implementation "androidx.paging:paging-runtime-ktx:$paging_version"
implementation "androidx.paging:paging-compose:1.0.0-alpha14"

PagingSource


package sobaya.app.repository.paging

import androidx.paging.PagingSource
import androidx.paging.PagingState

class SamplePagingSource : PagingSource<Int, String>() {
    override fun getRefreshKey(state: PagingState<Int, String>): Int? {
        return state.anchorPosition
    }

    override suspend fun load(params: LoadParams<Int>): LoadResult<Int, String> {
        val perPage = params.loadSize
        val page = params.key ?: 1
        val next = page + 1
        val prev = if (page == 1) null else page - 1

        return LoadResult.Page(
            data = (0..perPage).map { "$page-$it-DATA" },
            prevKey = prev,
            nextKey = next
        )
    }
}
이건 평소 Paging3을 사용하던 것과 똑같아서 특별한 설명이 없어요.
오늘에야 비로소 ページ番号-index-DATA(固定文字列) 방법이 추가되었다는 것을 알았다.

ViewModel


val samplePagingFlow: Flow<PagingData<String>> = Pager(
    PagingConfig(pageSize = 10, initialLoadSize = 10)
) {
    SamplePagingSource()
}.flow.cachedIn(viewModelScope)
이것도 평소 Paging3을 사용했을 때와 같다.

Composable


@Composable
fun SamplePagingList(
    viewModel: UserListViewModel
) {
    val lazyPagingItems = viewModel.samplePagingFlow.collectAsLazyPagingItems()

    LazyColumn {
        items(lazyPagingItems) { sample ->
            Text(text = sample ?: "")
        }
    }
}
아니, 자꾸 쑥스러워.
이 지경이 되면 정식으로 쓴 일은 복사가 끝난다.

최후


코드는 이거커밋입니다.

좋은 웹페이지 즐겨찾기