我正在尝试使用修改后的this solution版本创建无限可滚动的卡片旋转体。
@Composable
fun CircularList(
items: List<String>,
modifier: Modifier = Modifier,
onItemClick: (String) -> Unit
) {
val listState = rememberLazyListState(Int.MAX_VALUE / 2)
LazyColumn(
state = listState,
modifier = modifier
) {
items(
count = Int.MAX_VALUE,
itemContent = {
val index = it % items.size // line X
Text(text = items[index])
}
)
}
}然而,这与NPE崩溃:
java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter it
at androidx.compose.foundation.lazy.LazyListItemProviderImplKt$generateKeyToIndexMap$1$1.invoke(Unknown Source:2)这也会崩溃,如果我使用一个较小的500指数例如,但它不会崩溃,如果我使用50
val listState = rememberLazyListState(500) // Crashes
val listState = rememberLazyListState(50) // Doesn't crash是什么导致了这一切?
EDIT1:我试过用断点来调试它,在它停止之前它就崩溃了。项目列表不是空的,通常测试大小是2-6个对象。
EDIT2:还尝试使用scrollToItem()来设置初始索引,但返回了相同的异常
发布于 2022-07-15 09:00:09
我从来不明白为什么会出现这个问题,但是这里有一个解决方案(或解决办法/黑客)如何解决它:
@Composable
fun CircularList(
items: List<String>,
modifier: Modifier = Modifier,
onItemClick: (String) -> Unit
) {
val listState = rememberLazyListState(Int.MAX_VALUE / 4) // Use smaller index for smaller count
LazyColumn(
state = listState,
modifier = modifier
) {
items(
count = Int.MAX_VALUE / 2, // Use smaller count, somewhere around 1B
itemContent = {
val index = it % items.size
Text(text = items[index])
}
)
}
}出于某种原因,这是没有问题的。
https://stackoverflow.com/questions/72935666
复制相似问题