簡體   English   中英

state 更改的觸發事件,在 android 噴氣背包中組成

[英]Trigger event on state change, in android jetpack compose

我有一個 web 視圖和一個 TextField。 我想在 textField 觸發 onGo 操作或其值更改時觸發 web 視圖重新加載。

下面是可變字符串:

var urlValue: MutableState<String> = mutableStateOf(DefaultUrl)

文本字段看起來像這樣

var textFieldValue by remember { mutableStateOf(DefaultUrl) }

val textStyle = androidx.compose.ui.text.TextStyle(
    fontSize = ToolbarUrlFontSize.sp
)

BasicTextField(
    value = textFieldValue,
    onValueChange = { text ->
        textFieldValue = text
    },
   
    keyboardOptions = KeyboardOptions(imeAction = ImeAction.Go),
    keyboardActions = KeyboardActions(
        onGo = {
            urlValue.value = textFieldValue
        }
    )
) { innerTextField ->
    innerTextField()
}

以下是 web 視圖的代碼:

AndroidView({ context ->
    WebView(context).apply {
        if(urlValue.value.isNotEmpty()) {
            Log.i("TAG", "MainComposable: ${urlValue.value}")
            loadUrl(urlValue.value)
        }

        webViewClient = object : WebViewClient() {
            override fun shouldOverrideUrlLoading(
                view: WebView,
                url: String
            ): Boolean {
                view.loadUrl(url)
                return false
            }
        }
    }
}

但是 web 視圖不會重新加載新的 URL。 如何在 go 動作觸發器上加載新的 URL?

檢查以下代碼以在 WebView 中呈現:

@SuppressLint("SetJavaScriptEnabled")
@Composable
fun WebPageScreen(urlToRender: String) {
    AndroidView(factory = {
        WebView(it).apply {
            webViewClient = object : WebViewClient() {
                override fun shouldOverrideUrlLoading(
                    view: WebView?,
                    request: WebResourceRequest?
                ): Boolean {
                    return false
                }
            }
        }
    }, update = {
        it.loadUrl(urlToRender)
    })
}

AndroidView()可組合函數的update塊在布局膨脹后被調用。

您可以使用update屬性。
就像是:

    AndroidView(
        factory = {
            WebView(it).apply {
                this.webViewClient  =  WebViewClient()
                this.loadUrl("defaultUrl")
            }
        },
        update = {
            it.loadUrl(urlValue)
        },
    )

暫無
暫無

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

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