撰写 UI - 带分页的 LazyColumn 多次调用

时间:2021-04-08 20:57:50

标签: android android-jetpack-compose

我最近正在研究 Compose UI,但在分页方面遇到了一些问题。

因此,我的 onListApi 委托(进行 API 调用)被连续调用多次。我不知道为什么会这样。

我需要一些帮助来处理这里的问题。

你可以在下面看到我的代码:

@Composable
fun RepoListScreen() {
val viewModel = getViewModel<RepoListViewModel>()

Surface {
    RepoListView(
        onListApi = { viewModel.getList() },
        items = viewModel.getRepositoryResponse
    )
}
}

@Composable
private fun RepoListView(
onListApi: () -> Unit,
items: LiveData<Resource<List<Repository>>>) {

val listState = items.observeAsState(initial = Resource.empty())
val list = remember { mutableStateListOf<Repository>() }
val lastIndex = list.lastIndex
val loading = remember { mutableStateOf(false) }

listState.observer(
    onSuccess = { resourceList ->
        resourceList?.let {
            list.addAll(it)
        }
    },
    onEmpty = {
        onListApi.invoke()
    },
    onEveryState = { status ->
        loading.value = status == Resource.Status.LOADING
    }
)

LazyColumn(
    verticalArrangement = Arrangement.spacedBy(4.dp)
) {
    itemsIndexed(list) { index, item ->
        if (lastIndex == index) {
            onListApi.invoke()
        }
        RepoListItem(item)
    }
    if (loading.value) item { RepoListItemLoading() }
}
}

你知道我做错了什么吗?

0 个答案:

没有答案