Gezinme bileşeni, bir hedefe ulaşmak için basit ve genel bir yol sağlar. Bu arayüz, çeşitli bağlamları ve kullanıcı arayüzü çerçevelerini destekler. Örneğin, Gezinme bileşenini Oluştur, görünümler, parçalar, etkinlikler ve hatta özel kullanıcı arayüzü çerçeveleriyle kullanabilirsiniz.
Bu kılavuzda, çeşitli bağlamlarda bir hedefe gitmek için Gezinme bileşenini nasıl kullanabileceğiniz açıklanmaktadır.
NavController kullanma
Hedefler arasında geçiş yapmak için kullandığınız anahtar türü NavController
şeklindedir.
Sınıfın kendisi ve bunun bir örneğini nasıl oluşturacağınız hakkında daha fazla bilgi edinmek için Gezinme denetleyicisi oluşturma bölümüne bakın. Bu kılavuzda, özelliğin nasıl kullanılacağı bu kılavuzda açıklanmıştır.
Rota İzleme
Kullandığınız kullanıcı arayüzü çerçevesi ne olursa olsun, bir hedefe gitmek için kullanabileceğiniz tek bir işlev vardır: NavController.navigate()
.
navigate()
için çok sayıda aşırı yükleme var. Seçmeniz gereken aşırı yük, tam olarak bağlamınıza karşılık gelir. Örneğin, bir composable'a giderken bir aşırı yükleme, bir görünüme giderken ise başka bir aşırı yükleme kullanmanız gerekir.
Aşağıdaki bölümlerde kullanabileceğiniz bazı önemli navigate()
aşırı yüklemeleri özetlenmektedir.
Bir composable'a gitme
Gezinme grafiğinde bir composable'a gitmek için NavController.navigate(route)
işlevini kullanın. Bu aşırı yüklemeyle birlikte navigate()
, tek bir String
bağımsız değişkeni alır. Bu, route
. Hedefin anahtarı olarak işlev görür.
navController.navigate("friendslist")
Bir route
dizesi kullanarak gezinmek için öncelikle NavGraph
öğenizi, her hedef bir route
ile ilişkilendirilecek şekilde oluşturmanız gerekir. composable'larda bu işlemi composable()
işleviyle yapabilirsiniz.
Daha fazla bilgi için Hedefe gitme konusuna bakın.
composable'larınızdan etkinlikleri kullanıma sunun
composable bir işlevin yeni bir ekrana gitmesi gerektiğinde, doğrudan navigate()
çağrısı yapabilmesi için işleve NavController
referansı iletmemeniz gerekir.
Çok Yönlü Veri Akışı (UDF) ilkelerine göre, composable bunun yerine NavController
tarafından işlenen bir etkinliği göstermelidir.
Daha doğrudan belirtmek gerekirse composable, () -> Unit
türünde bir parametreye sahip olmalıdır.
NavHost
öğenize composable()
işlevini kullanarak hedefler eklediğinizde composable çağrınızı NavController.navigate()
öğesine iletin.
Bunun net bir örneği için aşağıdaki alt bölüme bakın.
Örnek
Önceki bölümün tanıtımı olarak aşağıdaki snippet'te şu noktalara dikkat edin:
MyAppNavHost
composable,NavController
örneğini barındırır.- Buna göre,
navigate()
çağrıları buradaProfileScreen
gibi daha düşük bir composable'da değil burada gerçekleşmelidir. ProfileScreen
, tıklandığında kullanıcıyıFriendsList
sayfasına yönlendiren bir düğme içerir. Ancaknavigate()
kendisine çağrılmaz.- Bunun yerine, düğme
onNavigateToFriends
parametresi olarak sunulan bir işlevi çağırır. MyAppNavHost
gezinme grafiğineProfileScreen
eklediğindeonNavigateToFriends
içinnavigate()
çağıran bir lambda geçirir.- Bu, kullanıcı
ProfileScreen
düğmesine bastığındafriendsList
öğesine doğru şekilde gitmesini sağlar.
@Composable
fun MyAppNavHost(
modifier: Modifier = Modifier,
navController: NavHostController = rememberNavController(),
startDestination: String = "profile"
) {
NavHost(
modifier = modifier,
navController = navController,
startDestination = startDestination
) {
composable("profile") {
ProfileScreen(
onNavigateToFriends = { navController.navigate("friendsList") },
/*...*/
)
}
composable("friendslist") { FriendsListScreen(/*...*/) }
}
}
@Composable
fun ProfileScreen(
onNavigateToFriends: () -> Unit,
/*...*/
) {
/*...*/
Button(onClick = onNavigateToFriends) {
Text(text = "See friends list")
}
}
Tam sayı kimliği kullanarak gezin
Tam sayı kimliği kullanarak bir hedefe gitmek için navigate(int)
aşırı yükünü çağırın. Bir işlemin veya hedefin kaynak kimliğini alır. Aşağıdaki kod snippet'i, ViewTransactionsFragment
hedefine gitmek için bu aşırı yükü nasıl kullanabileceğinizi gösterir:
Kotlin
viewTransactionsButton.setOnClickListener { view ->
view.findNavController().navigate(R.id.viewTransactionsAction)
}
Java
viewTransactionsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Navigation.findNavController(view).navigate(R.id.viewTransactionsAction);
}
});
Kimlikleri kullanarak gezinirken mümkün olduğunda actions özelliğini kullanmalısınız. İşlemler, navigasyon grafiğinizde ek bilgiler sunarak hedeflerinizin birbirine nasıl bağlandığını görsel olarak gösterir.
NavDeepLinkRequest kullanarak gezinme
Örtülü derin bağlantı hedefine gitmek için navigate(NavDeepLinkRequest)
aşırı yüklemesini kullanın. Aşağıdaki snippet, bu yöntemin bir uygulamasını sağlar:
Kotlin
val request = NavDeepLinkRequest.Builder
.fromUri("android-app://androidx.navigation.app/profile".toUri())
.build()
findNavController().navigate(request)
Java
NavDeepLinkRequest request = NavDeepLinkRequest.Builder
.fromUri(Uri.parse("android-app://androidx.navigation.app/profile"))
.build()
NavHostFragment.findNavController(this).navigate(request)
İşlem veya hedef kimliklerini kullanarak gezinmenin aksine, hedefin görünür olup olmamasından bağımsız olarak grafiğinizdeki herhangi bir derin bağlantıya gidebilirsiniz. Mevcut grafikte bir hedefe veya tamamen farklı bir grafik üzerinde farklı bir hedefe gidebilirsiniz.
İşlemler ve MIME türleri
Uri
'nin yanı sıra NavDeepLinkRequest
, işlemler ve MIME türleri içeren derin bağlantıları da destekler. İsteğe bir işlem eklemek için fromAction()
veya setAction()
işlevini kullanın. Bir isteğe MIME türü eklemek için fromMimeType()
veya setMimeType()
işlevini kullanın.
NavDeepLinkRequest
öğesinin örtülü derin bağlantı hedefini düzgün bir şekilde eşleştirmesi için URI, işlem ve MIME türünün hedefteki NavDeepLink
ile eşleşmesi gerekir. URI'lar kalıpla eşleşmeli, işlemler tam olarak eşleşmeli ve MIME türleri ilişkili olmalıdır. Örneğin, image/jpg
, image/\*
ile eşleşir
Diğer bağlamlar
Bu dokümanda, NavController.navigate()
'in en yaygın kullanım alanlarında nasıl kullanılacağı açıklanmaktadır. Ancak işlev, farklı bağlamlarda ve herhangi bir Kullanıcı Arayüzü çerçevesiyle birlikte kullanabileceğiniz bir dizi aşırı yük içerir. Bu aşırı yüklemeler hakkında daha fazla bilgi için referans belgelerine bakın.
Daha fazla bilgi
Daha fazla bilgi için aşağıdaki sayfalara bakın:
- Gezinme denetleyicisi oluşturma
- Gezinme ve arka yığın
- Seçeneklerle gezinme
- Kotlin DSL ve Gezinme Yazma'da tür güvenliği