El component de navegació fa servir un graf de navegació per gestionar la navegació de la teva aplicació.
Introducció
El Navigation component utilitza un graf de navegació per gestionar la navegació de la teva aplicació.
El graf de navegació és l’estructura de dades que conté cada destinació dins la teva aplicació i la connexió entre elles.
El graf de navegació és diferent de la back stack, que és una pila dins del NavController que conté les destinacions que l’usuari ha visitat recentment.
Hi ha tres tipus de destinacions: hosted, dialog, i activity.
Les destinacions “hosted” són les que s’utilitzen amb més freqüència, i ocupen tota la pantalla del’amfitrió.
Entorn de treball
Crea un nou projecte compose-navigation amb Amper
Habilita la serialització i afegeix una dependència amb la biblioteca navigation-compose: module.yaml
Navegació
A continuació tens una aplicació d’exemple amb dues pantalles (“screens”).
Modifica el fitxer src/main.kt:
import androidx.compose.foundation.layout.Column
import androidx.compose.material.Button
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.*
import androidx.navigation.NavController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import kotlinx.serialization.Serializable
@Composable
fun App() {
MaterialTheme {
val controller = rememberNavController()
NavHost(controller, startDestination = HomeRoute) {
composable<HomeRoute> { HomeScreen(controller) }
composable<CityRoute> { CityScreen() }
}
}
}
@Serializable
object HomeRoute
@Composable
fun HomeScreen(controller: NavController) {
Column {
Text("Home")
Button(onClick = { controller.navigate(CityRoute) }) {
Text("City")
}
}
}
@Serializable
object CityRoute
@Composable
fun CityScreen() {
Text("Barcelona")
}Amb la funció “composable” NavHost crees un graf de navegació.
En cridar la funció “composable” NavHost passem com a paràmetres un NavController i una ruta pel destí inicial (la ruta Home).
Amb la funció composable() defineixes quin “composable” es el destí d’una “ruta”.
Quan defineixes una ruta mai has de dir de quin “screen” ha de venir, sinó quin “screen” ha de gestionar la “ruta”.
Amb la tecla
Activitat
Afegeix un nova pàgina CountryScreen.
Show solution
fun val controller
}
}
object CountryRoute
fun
}Afegeix un botó aHomeScreen que et porti aCountryScreen.
Show solution
fun
Column
}
}
}
}Afegeix un botó aCountryScreen que et porti aCiytScreen.
Show solution
fun
Column
}
}
}
}Afegeix una barra de navegació(TopAppBar):
Show solution
fun actions
}
})
}
fun
Column
}
}
}
}
// ...Paràmetres
Si vols passar paràmetres a un “screen” has d’utlitzar un data class enlloc d’un object.
Ara el componentHomeScreen ja pot utilitzar la nova ruta:
fun
// ...
}
// ...
}
}ElNavHost ha de configurar la ruta passantCityRoute a CityScreen:
fun MaterialTheme val controller
}
}
}El componentCityScreen ha d’acceptar com a paràmetre CityRoute:
fun Column
}
}Ara CityScreen mostra la ciutat que li passen com a paràmetre.
Afegeix unTextField aHomeScreen on l’usuari pugui posar la ciutat que vulgui i al apretar el botó passi el contingut com a paràmetre:
Show solution
fun
// ...
modifier ) value ,
placeholder ,
onValueChange )
onClick )
}
}
// ...
}Crea un “screen”Countries que mostri una llista de paisos:
Show solution
val countries
object CountryListRoute
fun Column
}
}Afegeix un enllaç del “screen” a la barra de navegació
Show solution
fun title ,
actions
}
}
}
)
}Fes que la llista de països sigui clicable i navegui al “screen” Country:
Show solution
fun Column
modifier .
.
..
)
}}}}}Fes el mateix amb un “screen” Cities.