Navigasyon bileşeni, e-tablolara ulaşmak için bir hedefe gitmeyi içerir. Bu arayüz çeşitli bağlamları ve kullanıcı arayüzünü destekler. çerçeveleri. Örneğin, Gezinme bileşenini Oluştur, etkinlikleri ve hatta özel kullanıcı arayüzü çerçevelerini kullanabilir.
Bu kılavuzda, bir alana gitmek için Navigasyon bileşenini nasıl hedef olarak nitelendirilebilir.
NavController kullanma
Hedefler arasında geçiş yapmak için kullandığınız anahtar türü NavController
'dır.
Sınıfın kendisi hakkında daha fazla bilgi edinmek için Gezinme denetleyicisi oluşturma başlıklı makaleye bakın.
örnek oluşturacağız. Bu kılavuzda, bu özelliğin nasıl kullanılacağı açıklanmaktadır.
Rota İzleme
Hangi kullanıcı arayüzü çerçevesini kullanırsanız kullanın, kullanabileceğiniz tek bir işlev vardır
bir hedefe gitmek için: NavController.navigate()
.
navigate()
için çok sayıda aşırı yükleme var. Gereken aşırı yüklenme
tam olarak doğru bağlama uygun olduğunu seçin. Örneğin, dönüşüm izlemeyi
bir composable'a giderken ve bir başka görünüme giderken aşırı yüklenmeye yol açabilir.
Aşağıdaki bölümlerde, uygulayabileceğiniz önemli navigate()
aşırı yüklemelerinden bazıları açıklanmaktadır
pek de iyi olmadığını unutmayın.
Bir composable'a git
Bir composable'a gitmek için NavController.navigate<T>
komutunu kullanmanız gerekir.
Bu aşırı yüklenmeyle navigate()
, tek bir route
bağımsız değişkeni alır.
bir tür geçmektir. Hedefin anahtarıdır.
@Serializable
object FriendsList
navController.navigate(route = FriendsList)
Gezinme grafiğinde bir composable'a gitmek için önce
NavGraph
ile her hedef bir türe karşılık gelir. Örneğin,
composable'da bunu composable()
işleviyle yapıyorsunuz.
composable'larınızdaki etkinlikleri kullanıma sunma
Bir composable işlevinin yeni bir ekrana gitmesi gerektiğinde
doğrudan navigate()
öğesini çağırabilmesi için NavController
öğesine referans verir.
Tek Yönlü Veri Akışı (UDF) ilkelerine göre, composable
bunun yerine NavController
tarafından işlenen bir etkinliği görüntülemelidir.
Daha doğrudan bir ifadeyle, composable'ınızın () -> Unit
türünde bir parametresi olmalıdır.
NavHost
cihazınıza composable()
ile hedef eklediğinizde
fonksiyonunuz için composable çağrınızı NavController.navigate()
adresine iletin.
Bunun bir örneği için aşağıdaki alt bölüme bakın.
Örnek
Önceki bölümlerin gösterimi olarak bu noktaları aşağıdaki snippet:
- Grafikteki her hedef, bir rota kullanılarak oluşturulur. bu işlem için gereken verileri tanımlayan serileştirilebilir nesne veya sınıf seçeceğiz.
MyAppNavHost
composable,NavController
örneğini barındırır.- Buna göre,
navigate()
çağrıları orada değil, daha düşük düzeyde yapılmalıdır composable (ProfileScreen
gibi). ProfileScreen
, kullanıcıyıFriendsList
adresine yönlendiren bir düğme içerir tıklayın. Ancaknavigate()
kendisini çağırmaz.- Bunun yerine düğme, parametre olarak sunulan bir işlevi çağırır
onNavigateToFriends
MyAppNavHost
tarafından gezinme grafiğineProfileScreen
eklendiğinde,onNavigateToFriends
isenavigate(route = FriendsList
adlı bir lambdadan geçer.- Bu, kullanıcı
ProfileScreen
düğmesine bastığındaFriendsListScreen
adresine doğru rotayı izleme.
@Serializable
object Profile
@Serializable
object FriendsList
@Composable
fun MyAppNavHost(
modifier: Modifier = Modifier,
navController: NavHostController = rememberNavController(),
) {
NavHost(
modifier = modifier,
navController = navController,
startDestination = Profile
) {
composable<Profile> {
ProfileScreen(
onNavigateToFriends = { navController.navigate(route = FriendsList) },
/*...*/
)
}
composable<FriendsList> { FriendsListScreen(/*...*/) }
}
}
@Composable
fun ProfileScreen(
onNavigateToFriends: () -> Unit,
/*...*/
) {
/*...*/
Button(onClick = onNavigateToFriends) {
Text(text = "See friends list")
}
}
Tam sayı kimliğini kullanarak gezin
Tam sayı kimliği kullanarak bir hedefe gitmek için navigate(int)
işlevini çağırın
aşırı yüklenme. Bir işlemin veya hedefin kaynak kimliğini alır. İlgili içeriği oluşturmak için kullanılan
aşağıdaki kod snippet'i,
ViewTransactionsFragment
:
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 işlem kullanmanız gerekir. Eylemler gezinme grafiğinizde, ne kadar hızlı olduğunu gösteren ek bilgiler sağlar. hedefleri birbirleriyle bağlantılandırıyor.
NavDeepLinkRequest kullanarak gezin
Örtülü derin bağlantı hedefine gitmek için
navigate(NavDeepLinkRequest)
aşırı yüklenme. Aşağıdaki snippet,
uygulayabilirsiniz:
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, istediğiniz derinliğe bağlantısını tıklayın. Şunları yapabilirsiniz: mevcut grafikteki bir hedefe veya tamamen farklı bir grafiktir.
İşlemler ve MIME türleri
NavDeepLinkRequest
, Uri
'a ek olarak şunlara sahip derin bağlantıları da destekler:
işlemlerini ve MIME türlerini içerir. İsteğe bir işlem eklemek için şunu kullanın:
fromAction()
veya setAction()
. Bir isteğe MIME türü eklemek için:
fromMimeType()
veya setMimeType()
kullanın.
NavDeepLinkRequest
öğesinin örtülü derin bağlantı hedefini doğru şekilde eşleştirmesi için
URI, eylem ve MIME türünün NavDeepLink
seçeceğiz. URI'lar kalıpla eşleşmeli, işlemler tam olarak eşleşmeli,
ve MIME türlerinin ilişkili olması gerekir. Örneğin, image/jpg
şununla eşleşir:
image/\*
Diğer bağlamlar
Bu dokümanda, NavController.navigate()
'in en yaygın şekilde nasıl kullanılacağı
yaygın kullanım alanlarına bakalım. Ancak fonksiyonda kendi uygulayabileceğiniz bir dizi aşırı yükleme vardır.
herhangi bir kullanıcı arayüzü çerçevesiyle
birlikte kullanılıyor. Bkz.
referans belgelerine bakın.
Daha fazla bilgi
Daha fazla bilgi için aşağıdaki sayfalara bakın:
- Gezinme denetleyicisi oluşturma
- Gezinme ve geri yığını
- Seçeneklerle gezinme
- Kotlin DSL ve Gezinme Oluşturma Aracı'nda tür güvenliği