繁体   English   中英

在jetpack compose中替换GlobalScope.launch

[英]replace GlobalScope.launch in jetpack compose

我正在使用 jetpack compose 编写一些寻呼机代码,但遇到了需要通过单击按钮更改页码的情况。 这是我的按钮点击事件:

onClick = {pagerState.scrollToPage(page=currentPager+1)}

但是当我这样做时,我得到这个错误: Suspend function 'scrollToPage' should be called only from a coroutine or another suspend function

我通过添加以下内容得到了解决方案:

onClick = {GlobalScope.launch (Dispatchers.Main) {pagerState.scrollToPage(page=currentPager+1)}}

但仍然不推荐 GlobalScope.launch。 上面的 onClick 在基本的 compose 函数中被调用。 如何在 jetpack compose 中解决此问题?

你应该使用下面的代码在你的可组合中创建一个协程范围。

val coroutinesScope = rememberCoroutineScope()

请注意,您只能在可组合中调用它,因此您不能在onClick()创建coroutinesScope并且必须在可组合的顶部对其进行初始化。

阅读此文档:伴奏寻呼机

这是一个原始代码: Raw code for scroll to page

如果要跳转到特定页面,可以在 CoroutineScope 中调用 call pagerState.scrollToPage(index) 或 pagerState.animateScrollToPage(index) 方法:

val pagerState = rememberPagerState()
val scope = rememberCoroutineScope()

HorizontalPager(count = 10, state = pagerState) { page ->
    // ...page content
}

// Later, scroll to page 2
scope.launch {
    pagerState.scrollToPage(2)
}

暂无
暂无

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

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