获取喷气背包中最后一个可见的项目索引 compose LazyColumn

时间:2021-03-19 16:46:10

标签: android android-jetpack-compose

我想检查列表是否滚动到列表的末尾lazyListState 如何不提供此属性

我为什么需要这个?我想为列表的“滚动到结尾”显示一个 FAB,如果最后一项已经可见,则隐藏它

(注意:确实如此,但它是 internal

  /**
   * Non-observable way of getting the last visible item index.
   */
  internal var lastVisibleItemIndexNonObservable: DataIndex = DataIndex(0)

不知道为什么)

val state = rememberLazyListState()
LazyColumn(
    state = state,
    modifier = modifier.fillMaxSize()
) {
    // if(state.lastVisibleItem == logs.length - 1) ...
    items(logs) { log ->
        if (log.level in viewModel.getShownLogs()) {
            LogItemScreen(log = log)
        }
    }
}

那么,如何检查我的 LazyColumn 是否滚动到数据集的末尾?

2 个答案:

答案 0 :(得分:1)

这是您实现它的一种方法:

检查是否滚动到最后的扩展函数:

fun LazyListState.isScrolledToTheEnd() = layoutInfo.visibleItemsInfo.lastOrNull()?.index == layoutInfo.totalItemsCount - 1

示例用法:

val listState = rememberLazyListState()
val listItems = (0..25).map { "Item$it" }

LazyColumn(state = listState, modifier = Modifier.fillMaxSize()) {
    items(listItems) { item ->
        Text(text = item, modifier = Modifier.padding(16.dp))
    }
}

Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.BottomEnd) {
    if (!listState.isScrolledToTheEnd()) {
        ExtendedFloatingActionButton(
            modifier = Modifier.padding(16.dp),
            text = { Text(text = "Go to Bottom") },
            onClick = { /* Scroll to the end */}
        )
    }
}

结果:

https://im.ezgif.com/tmp/ezgif-1-b725f96cedd2.gif

答案 1 :(得分:0)

我找到的当前解决方案是:

LazyColumn(
    state = state,
    modifier = modifier.fillMaxSize()
) {
    if ((logs.size - 1) - state.firstVisibleItemIndex == state.layoutInfo.visibleItemsInfo.size - 1) {
        println("Last visible item is actually the last item")
        // do something
    }
    items(logs) { log ->
        if (log.level in viewModel.getShownLogs()) {
            LogItemScreen(log = log)
        }
    }
}

声明
lastDataIndex - state.firstVisibleItemIndex == state.layoutInfo.visibleItemsInfo.size - 1
通过从第一个可见项目中减去数据集的最后一个索引并检查它是否等于可见项目计数

来猜测最后一个项目