簡體   English   中英

如何以編程方式單擊 Jetpack Compose 中的按鈕?

[英]How can I programmatically click a Button in Jetpack Compose?

對於android.widget.Button ,我可以使用performClick()以編程方式模擬點擊。 但我不知道如何在 Jetpack Compose 中做到這一點。 我查看了compose.material文檔,但至少找不到任何相關信息。

使用此解決方案,您將以編程方式獲得漣漪效應,就像您按下按鈕一樣:

1)創建交互源:

val interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }

2)創建協程scope:

val coroutine = rememberCoroutineScope()

3)在您的按鈕中設置交互源:

Button(
    onClick = {
        vm.myFunction()
    },
    //important
    interactionSource = interactionSource,
    .
    .
    .
)

4)最后從任何地方這樣調用它:

coroutine.launch {
    val press = PressInteraction.Press(Offset.Zero)
    interactionSource.emit(press)
    vm.myFunction()
    delay(300)
    interactionSource.emit(PressInteraction.Release(press))
}

在撰寫中,您正在創建一個帶有操作的按鈕。 您可以通過操作 function 並以編程方式調用相同的 function。

// you need to remember your callback to prevent extra recompositions.
// pass all variables that may change between recompositions
// as keys instead of `Unit`
val onClickAction = remember(Unit) { 
    {
        
        // do some action
    }
}

LaunchedEffect(Unit) {
    // perform action in 1 sec after view appear
    delay(1000)
    onClickAction()
}
Button(
    onClick = onClickAction
) {
    Text(text = "Button")
}

在我發現這個問題時, performClick()通常在SemanticNodeInteraction object 上按預期工作 - 即使用 Jetpack Compose。

我確實遇到了一個問題,它只在元素當前可見時才起作用,所以我需要先調用performScrollTo()

composeTestRule.onNode(...).run {
    performScrollTo()
    performClick()
}

給你 go

    Button(
            onClick = {
            // here you can perform you action on button click

            },
            modifier = Modifier
                .fillMaxWidth()
                .height(55.dp)
                .background(
                    color = WoodSmoke,
                    shape = RoundedCornerShape(30)
                ),
            colors = ButtonDefaults.buttonColors(backgroundColor = 
            Color.Transparent),

            ) {
            Text(text = "Sign in", color = Color.White)
        }

一個非常簡單的解決方案。

  1. 創建一個 state 變量

     val verifyNumberOnClick = remember { mutableStateOf(false) }
  2. 創建一個私有的 function,可以用作 onClick 的操作。

     private fun makeSum(a: Int, b: Int){ Log.e("Atiar", "Sum of a & b: ${a+b}") }
  3. 創建if-else以運行該 function。

     if (verifyNumberOnClick.value){ makeSum(5,6) verifyNumberOnClick.value = false }
  4. 你完成了。 現在是時候將verifyNumberOnClick的值更改為true了。

無論身在何處,您都可以撥打 function。 意味着您可以從任何地方執行 onclick 項任務。

作為示例,您可以從單擊按鈕更改verifyNumberOnClick的值。

Button(
    onClick = {verifyNumberOnClick.value = false}
) {
    Text(text = "Button")
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM