#android #android-jetpack-compose
Вопрос:
Я создал WebView, который представляет собой представление Android как составное. Это содержимое каркаса экрана, а сам каркас имеет верхнюю панель в виде панели действий с кнопкой «Назад» слева, и я хочу обработать нажатие кнопки «Назад», чтобы проверить, может ли веб-представление вернуться или нет, как обычно, в представлении Android. Вопрос в том, как сделать событие onClicked, чтобы узнать веб-представление?
Код:
Scaffold(
topBar = {
CustomAppBar(
title = title,
onBackPressed = {
// check webview.canGoBack()
// if yes, just go back
// if not, finish activity
},
)
},
content = {
CustomWebView(
url = originalUrl,
)
}
)
Ответ №1:
Вам нужно отслеживать это в переменной, скажем, за пределами эшафота. Что-то вроде
var canGoBack by mutableStateOf (false)
var goBackTrigger by mutableStateOf (false)
Scaffold(
topBar = {
CustomAppBar(
title = title,
onBackPressed = {
if(canGoBack){
goBackTrigger = true
}
else{
//Finish activity
}
},
)
},
content = {
CustomWebView(
url = originalUrl,
goBackTrigger = goBackTrigger
)
}
)
@Composable
fun CustomWebView(
url: String,
goBackTrigger: Boolean
){
//Add this where you can access the webView methods
if(goBackTrigger){
webView.goBack()
goBackTrigger = false
//You might need to update the url here as well. See to it.
}
}
Идея заключается в том, чтобы хранить состояние в переменной и изменять эту переменную из веб-представления содержимого всякий раз, когда выполняются условия. Причина определения переменной чуть выше структуры заключается в том, чтобы убедиться, что она доступна из блока содержимого.
Всякий раз, когда триггер изменяется, веб-представление перекомпонируется, так как оно считывает эту переменную.
Комментарии:
1. Вы также можете использовать простую логическую переменную вместо заполнителя состояния.
2. Как насчет логики «Навигации», как управлять веб-представлением, чтобы вернуться с панели приложений?
3. Не следует ли вам тогда отметить это как ответ?