繁体   English   中英

还记得在lazycolumn 中滚动position 吗?

[英]Remember scroll position in lazycolumn?

我知道记住惰性列表 state 并且工作正常

 setContent {       
       Test(myList) // Call Test with a dummy list
    }

  @Composable
    fun Test(data: List<Int>){
        val state = rememberLazyListState()

        LazyColumn(state = state) {
            items(data){ item ->Text("$item")}
          }
     }

它会记住滚动 position 并且在每次旋转和更改配置后都会相同
但是每当我尝试从数据库中捕获数据并使用诸如collectAsState之类的方法时
它不起作用,这似乎是一个问题

   setContent{
      val myList by viewModel.getList.collectAsState(initial = listOf())
      Test(myList)
   }

不幸的是,目前还没有本地方法可以做到这一点,但您可以使用以下代码:

val listState = rememberLazyListState()

listState有 3 个方法:

  • firstVisibleItemIndex
  • firstVisibleItemScrollOffset
  • isScrollInProgress

它们都是State() ,因此您将始终在数据更新时获得数据。 例如,如果您开始滚动列表, isScrollInProgress将从false变为true

保存并恢复 STATE

val listState: LazyListState = rememberLazyListState(viewModel.index, viewModel.offset)

  LaunchedEffect(key1 = listState.isScrollInProgress) {
    if (!listState.isScrollInProgress) {
      viewModel.index = listState.firstVisibleItemIndex
      viewModel.offset = listState.firstVisibleItemScrollOffset
    }
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM