簡體   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