Связь между составными

#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. Не следует ли вам тогда отметить это как ответ?