Android navigasyonda iletişim kutusu hedefi terimi, uygulamanın gezinme grafiğinde bulunan ve iletişim pencereleri, yer paylaşımlı uygulama kullanıcı arayüzü öğeleri ve içeriği biçimindeki hedefleri ifade eder.
İletişim kutusu hedefleri gezinme ana makinesini dolduran barındırılan hedefler üzerinde göründüğünden, iletişim kutusu hedeflerinin NavController
arka yığınınızla nasıl etkileşimde bulunduğuyla ilgili bazı önemli noktalar vardır.
composable iletişim kutusu
Compose'da iletişim kutusu hedefi oluşturmak için dialog()
işlevini kullanarak NavHost
öğenize hedef ekleyin. İşlev temelde composable
ile aynı şekilde davranır, barındırılan hedef yerine yalnızca bir iletişim kutusu hedefi oluşturur.
Aşağıdaki örneği inceleyin:
@Serializable
object Home
@Serializable
object Settings
@Composable
fun HomeScreen(onNavigateToSettings: () -> Unit){
Column {
Text("Home")
Button(onClick = onNavigateToSettings){
Text("Open settings")
}
}
}
// This screen will be displayed as a dialog
@Composable
fun SettingsScreen(){
Text("Settings")
// ...
}
@Composable
fun MyApp() {
val navController = rememberNavController()
NavHost(navController, startDestination = Home) {
composable<Home> { HomeScreen(onNavigateToSettings = { navController.navigate(route = Settings) }) }
dialog<Settings> { SettingsScreen() }
}
}
- Başlangıç hedefi
Home
rotasını kullanıyor.composable()
tarafından grafiğe eklendiğinden, barındırılan bir hedeftir. - Diğer hedef
Settings
rotasını kullanıyor.- Benzer şekilde,
dialog()
bunu grafiğe eklediği için bir iletişim kutusu hedefidir. - Kullanıcı
HomeScreen
konumundanSettingsScreen
konumuna gittiğinde ikinci sayfaHomeScreen
üzerinden görünür.
- Benzer şekilde,
SettingsScreen
birDialog
composable'ı içermese de, iletişim kutusu hedefi olduğundanNavHost
bunu birDialog
içinde gösterir.
İletişim kutusu hedefleri, NavHost
içindeki önceki hedefin üzerinde görünür. Bunları, iletişim kutusu, gezinme grafiğinizdeki diğer tüm hedeflerden bağımsız olarak kendi yaşam döngüsüne ve kaydedilmiş durumuna ihtiyacı olan ayrı bir ekranı temsil ettiğinde kullanın. Onay gibi daha az karmaşık bir istem için iletişim kutusu istiyorsanız AlertDialog
veya alakalı bir composable kullanmayı tercih edebilirsiniz.
Kotlin DSL
Parçalarla çalışıyor ve grafiğinizi oluşturmak için Kotlin DSL'yi kullanıyorsanız iletişim kutusu hedefi eklemek, Oluşturma kullanımına çok benzer.
Aşağıdaki snippet'in, parça kullanan bir iletişim kutusu hedefi eklemek için dialog()
işlevini de nasıl kullandığını düşünün:
// Define destinations with serializable classes or objects
@Serializable
object Home
@Serializable
object Settings
// Add the graph to the NavController with `createGraph()`.
navController.graph = navController.createGraph(
startDestination = Home
) {
// Associate the home route with the HomeFragment.
fragment<HomeFragment, Home> {
label = "Home"
}
// Define the settings destination as a dialog using DialogFragment.
dialog<SettingsFragment, Settings> {
label = "Settings"
}
}
XML
Mevcut bir DialogFragment
öğeniz varsa iletişim kutusunu gezinme grafiğinize eklemek için aşağıdaki örnekte gösterildiği gibi <dialog>
öğesini kullanın:
<?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/nav_graph"> ... <dialog android:id="@+id/my_dialog_fragment" android:name="androidx.navigation.myapp.MyDialogFragment"> <argument android:name="myarg" android:defaultValue="@null" /> <action android:id="@+id/myaction" app:destination="@+id/another_destination"/> </dialog> ... </navigation>