नेविगेशन घटक सरल और सामान्य तरीका उपलब्ध कराता है मंज़िल तक पहुंचने में मदद मिलेगी. यह इंटरफ़ेस कई तरह के कॉन्टेक्स्ट और यूज़र इंटरफ़ेस (यूआई) पर काम करता है फ़्रेमवर्क शामिल हैं. उदाहरण के लिए, नेविगेशन कॉम्पोनेंट का इस्तेमाल, लिखने के लिए किया जा सकता है. व्यू, फ़्रैगमेंट, ऐक्टिविटी, और यहां तक कि कस्टम यूज़र इंटरफ़ेस (यूआई) फ़्रेमवर्क.
इस गाइड में यह बताया गया है कि नेविगेशन कॉम्पोनेंट का इस्तेमाल करके, डेस्टिनेशन पर मिलती है.
NavController का इस्तेमाल करें
एक डेस्टिनेशन से दूसरे डेस्टिनेशन पर जाने के लिए, NavController
कुंजी का इस्तेमाल किया जाता है.
क्लास के बारे में ज़्यादा जानकारी के लिए, नेविगेशन कंट्रोलर बनाना देखें
और उसे कैसे बनाया जाएगा. इस गाइड में, इसके इस्तेमाल करने का तरीका बताया गया है.
नेविगेट करें
आप चाहे किसी भी यूज़र इंटरफ़ेस (यूआई) फ़्रेमवर्क का इस्तेमाल करें, एक ही फ़ंक्शन का इस्तेमाल किया जा सकता है
मंज़िल तक पहुंचने के लिए: NavController.navigate()
.
navigate()
के लिए कई ओवरलोड उपलब्ध हैं. आपको
चुनें आपके सटीक संदर्भ से मेल खाता हो. उदाहरण के लिए, आपको किसी एक
कंपोज़ेबल और अन्य पर नेविगेट करते समय ओवरलोड हो जाता है.
यहां दिए गए सेक्शन में, navigate()
से जुड़े कुछ अहम ओवरलोड के बारे में बताया गया है
इस्तेमाल करें.
किसी कंपोज़ेबल पर जाएं
किसी कंपोज़ेबल पर जाने के लिए, आपको NavController.navigate<T>
का इस्तेमाल करना होगा.
इस ओवरलोड के साथ, navigate()
एक route
तर्क लेता है जिसके लिए आप
एक टाइप पास करते हैं. यह एक गंतव्य की कुंजी के रूप में काम करता है.
@Serializable
object FriendsList
navController.navigate(route = FriendsList)
नेविगेशन ग्राफ़ में किसी कंपोज़ेबल पर जाने के लिए, सबसे पहले
NavGraph
जैसे कि हर डेस्टिनेशन किसी एक टाइप से जुड़ा हो. इसके लिए
कंपोज़ेबल में सेट अप किया जाता है, तो ऐसा composable()
फ़ंक्शन से किया जाता है.
अपने कंपोज़ेबल में मौजूद इवेंट की जानकारी सार्वजनिक करें
जब किसी कंपोज़ेबल फ़ंक्शन को नई स्क्रीन पर नेविगेट करना हो, तो
यह NavController
का एक रेफ़रंस है, ताकि यह navigate()
को सीधे कॉल कर सके.
यूनिडायरेक्शनल डेटा फ़्लो (यूडीएफ़) सिद्धांतों के मुताबिक, कंपोज़ेबल
इसके बजाय उसे कोई ऐसा इवेंट दिखाना चाहिए जिसे NavController
मैनेज करता है.
सीधे शब्दों में कहें, तो आपके कंपोज़ेबल का पैरामीटर () -> Unit
टाइप होना चाहिए.
जब composable()
का इस्तेमाल करके, NavHost
में डेस्टिनेशन जोड़े जाते हैं
फ़ंक्शन का इस्तेमाल करने के लिए, अपने कंपोज़ेबल कॉल को NavController.navigate()
को पास करें.
इसके उदाहरण के लिए, यहां दिया गया सब-सेक्शन देखें.
उदाहरण
पहले के सेक्शन में बताए गए तरीके से, इन बिंदुओं को अब स्निपेट:
- ग्राफ़ में हर डेस्टिनेशन को एक रूट का इस्तेमाल करके बनाया जाता है, जो इसके लिए ज़रूरी डेटा की जानकारी देने वाला, क्रम से लगाया जा सकने वाला ऑब्जेक्ट या क्लास गंतव्य.
MyAppNavHost
कंपोज़ेबल मेंNavController
इंस्टेंस होता है.- इसी तरह,
navigate()
पर किए जाने वाले कॉल वहां होने चाहिए, न कि उनकी संख्या कंपोज़ेबल. जैसे,ProfileScreen
. ProfileScreen
में ऐसा बटन होता है जो उपयोगकर्ता कोFriendsList
पर ले जाता है क्लिक करें. हालांकि, वह खुदnavigate()
को कॉल नहीं करता.- इसके बजाय, यह बटन ऐसे फ़ंक्शन को कॉल करता है जो पैरामीटर के तौर पर दिखता है
onNavigateToFriends
. - जब
MyAppNavHost
, नेविगेशन ग्राफ़ मेंProfileScreen
को जोड़ता है,onNavigateToFriends
के लिए, यह Lambda फ़ंक्शन कोnavigate(route = FriendsList
से कॉल करता है). - इससे यह पक्का होता है कि जब लोग
ProfileScreen
बटन दबाएंगे, तब उन्हेंFriendsListScreen
पर ठीक से नेविगेट करें.
@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")
}
}
पूर्णांक आईडी का इस्तेमाल करके नेविगेट करना
पूर्णांक आईडी का इस्तेमाल करके किसी डेस्टिनेशन पर जाने के लिए, navigate(int)
को कॉल करें
ओवरलोड. यह किसी कार्रवाई या डेस्टिनेशन का संसाधन आईडी लेता है. कॉन्टेंट बनाने
कोड स्निपेट में बताया गया है कि इस ओवरलोड का इस्तेमाल करके,
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);
}
});
आईडी का इस्तेमाल करके नेविगेट करते समय, जहां हो सके आपको कार्रवाइयों का इस्तेमाल करना चाहिए. कार्रवाइयाँ अपने नेविगेशन ग्राफ़ में ज़्यादा जानकारी दें, ताकि विज़ुअल के रूप में यह दिखाया जा सके कि आपकी मंज़िलें एक-दूसरे से कनेक्ट होती हैं.
NavDeepLinkRequest का इस्तेमाल करके नेविगेट करना
इंप्लिसिट डीप लिंक डेस्टिनेशन पर जाने के लिए,
navigate(NavDeepLinkRequest)
ओवरलोड. फ़ॉलो स्निपेट एक
इस तरीके को लागू करें:
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)
कार्रवाई या डेस्टिनेशन आईडी का इस्तेमाल करके नेविगेट करने के उलट, आप किसी भी डीप लिंक पर जा सकते हैं अपने ग्राफ़ में लिंक करें, भले ही डेस्टिनेशन दिख रहा हो या नहीं. आप वर्तमान ग्राफ़ पर किसी गंतव्य पर या पूरी तरह से गंतव्य पर नेविगेट करें दूसरा ग्राफ़ है.
कार्रवाइयां और MIME टाइप
Uri
के अलावा, NavDeepLinkRequest
इनके साथ भी डीप लिंक इस्तेमाल करता है:
कार्रवाइयां और MIME टाइप शामिल करें. अनुरोध में कोई कार्रवाई जोड़ने के लिए, इसका इस्तेमाल करें
fromAction()
या setAction()
. किसी अनुरोध में MIME टाइप जोड़ने के लिए,
fromMimeType()
या setMimeType()
का इस्तेमाल करें.
NavDeepLinkRequest
को इंप्लिसिट डीप लिंक डेस्टिनेशन से सही तरीके से मैच करने के लिए,
यूआरआई, कार्रवाई, और MIME टाइप सभी यूआरएल में मौजूद NavDeepLink
से मेल खाना चाहिए
गंतव्य. यूआरआई, पैटर्न से मैच होना चाहिए, कार्रवाइयां एग्ज़ैक्ट मैच होनी चाहिए,
साथ ही, यह ज़रूरी है कि MIME टाइप एक-दूसरे से जुड़े हों. उदाहरण के लिए, image/jpg
इससे मेल खाता है:
image/\*
ज़्यादा जानकारी
इस दस्तावेज़ में बताया गया है कि NavController.navigate()
का इस्तेमाल
इस्तेमाल के सामान्य उदाहरण. हालांकि, फ़ंक्शन में कई ओवरलोड हैं
का इस्तेमाल अलग-अलग कॉन्टेक्स्ट में करता है. साथ ही, किसी यूज़र इंटरफ़ेस (यूआई) फ़्रेमवर्क के साथ मिलकर भी इस्तेमाल किया जा सकता है. ज़्यादा जानकारी के लिए,
इन ओवरलोड के बारे में ज़्यादा जानकारी के लिए, रेफ़रंस दस्तावेज़.
इसके बारे में और पढ़ें
ज़्यादा जानकारी के लिए, ये पेज देखें:
- नेविगेशन कंट्रोलर बनाना
- नेविगेशन और पिछली गतिविधियां
- विकल्पों की मदद से नेविगेट करना
- Kotlin DSL और नेविगेशन कंपोज़ में सुरक्षा टाइप करना