我想在單擊每個選項卡時呼叫一個 Int 值,但出現錯誤。我用過 LaunchEffect(),Coroutine scope但沒有解決。我該如何解決?
螢屏代碼:
@ExperimentalPagerApi
@Composable
fun Tabs(
pagerState: PagerState,
modifier: Modifier,
state: MyJobsState,
onTabSelected: @Composable (tabPage: Int) -> Unit
) {
val scope = rememberCoroutineScope()
ScrollableTabRow(
selectedTabIndex = pagerState.currentPage,
indicator = { tabPositions ->
TabRowDefaults.Indicator(
modifier.pagerTabIndicatorOffset(pagerState, tabPositions),
height = 0.dp,
)
},
edgePadding = 0.dp,
divider = {}
) {
state.items?.forEachIndexed { index, _ ->
Tab(
text = {
Text(
text = state.items[index].title ?: "")
},
selected = pagerState.currentPage == index,
onClick = {
scope.launch {
pagerState.animateScrollToPage(index)
}
onTabSelected.invoke(index)
}
)
}
}
}
我收到此錯誤:

uj5u.com熱心網友回復:
onTabSelected被標記為@Composable,這就是為什么你不能在里面呼叫它onClick。
您只能@Composable在 other 中呼叫@Composable,而不能在副作用中呼叫。洗掉此注釋,您可能需要重新設計使用Tabs.
你又犯了同樣的錯誤:onTabSelected是副作用。您不能將可組合視圖添加到副作用內的視圖層次結構。
相反,您應該使用狀態變數,并根據此狀態更改視圖,例如:
var selectedTab by remember { mutableStateOf(0) }
ScrollableTabRow(
selectedTabIndex = pagerState.currentPage,
indicator = { tabPositions ->
TabRowDefaults.Indicator(
modifier.pagerTabIndicatorOffset(pagerState, tabPositions),
height = 0.dp,
)
},
edgePadding = 0.dp,
divider = {}
) {
state.items?.forEachIndexed { index, _ ->
Tab(
text = {
Text(
text = state.items[index].title ?: "")
},
selected = pagerState.currentPage == index,
onClick = {
selectedTab = index
}
)
}
}
when (selectedTab) {
0 -> {
FirstView()
}
1 -> {
SecondView()
}
}
您可以在檔案中的 Compose 中找到有關狀態的更多資訊,包括解釋基本原理的這個 youtube 視頻。
uj5u.com熱心網友回復:
從您的onTabSelected引數中洗掉@Composable 。您不能直接從單擊事件或任何其他不可組合的函式呼叫可組合。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/367760.html
上一篇:在布局檔案夾中創建多個檔案夾Androidstudio?
下一篇:列出陣列的所有元素
