【问题标题】:Scroll Two Lazy Scrollers Together一起滚动两个懒惰的滚动条
【发布时间】:2021-10-17 20:54:04
【问题描述】:

这个问题以前有人问过,但形式不同,关于一些特定的用例,到目前为止还没有答案。我终于让它工作了,所以我在这里分享这个,但这不应该被标记为重复,因为前面的所有问题都指定了特定的东西,比如ColumnsscrollableModifiers,或者LazyRows,但是这个将解决一般的所有问题,我的意思是所有的惰性滚动器,甚至希望一般的可滚动容器。我会发布答案,所以这只是我希望与社区分享的一个知识,当然也欢迎任何改进。

【问题讨论】:

    标签: android state android-jetpack-compose android-jetpack-compose-list android-jetpack-compose-modifier


    【解决方案1】:

    这是完整的工作解决方案:-

    @Composable
    fun DUME() {
    
        val stateRowX = rememberLazyListState() // State for the first Row, X
        val stateRowY = rememberLazyListState() // State for the second Row, Y
    
        Column { // Placing two Lazy Rows one above the other for the example
    
            LazyRow(state = stateRowY) {
                items(LoremIpsum(10).values.toList()) {
                    Text(it)
                }
            }
    
            LazyRow(state = stateRowX) {
                items(LoremIpsum(10).values.toList()) {
                    Text(text = it)
                }
            }
    
        }
    
        //This might seem crazy
    
        LaunchedEffect(stateRowX.firstVisibleItemScrollOffset) {
            stateRowY.scrollToItem(
                stateRowX.firstVisibleItemIndex,
                stateRowX.firstVisibleItemScrollOffset
            )
        }
    
        LaunchedEffect(stateRowY.firstVisibleItemScrollOffset) {
            stateRowX.scrollToItem(
                stateRowY.firstVisibleItemIndex,
                stateRowY.firstVisibleItemScrollOffset
            )
        }
    }
    

    这里的items 导入是:androidx.compose.foundation.lazy.items,它接受一个列表而不是一个数字(大小)。

    【讨论】:

    • 只想翻译` //这可能看起来很疯狂` 它实际上非常优雅。基本上它说:如果惰性行 X 被更新(通过检测第一项的可滚动偏移的变化),我们移动 Y 以使其与 X 相同。developer.android.com/jetpack/compose/side-effects
    • 您在状态之间有递归调用,一个更改调用另一个,另一个调用一个等,直到: 1. 整个这件事开始滞后。 2. 失去惯性。您的解决方案根本没有。您需要阻止递归调用。
    • 感谢您在这里分享您的想法。您是否在设备上运行代码?看起来像递归,但块的执行效率很高。我个人没有延迟。就惯性而言,我会检查一次,但我认为即使是这里也保留了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 2016-01-10
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    相关资源
    最近更新 更多