किसी डेस्टिनेशन तक नेविगेट करें

नेविगेशन घटक सरल और सामान्य तरीका उपलब्ध कराता है मंज़िल तक पहुंचने में मदद मिलेगी. यह इंटरफ़ेस कई तरह के कॉन्टेक्स्ट और यूज़र इंटरफ़ेस (यूआई) पर काम करता है फ़्रेमवर्क शामिल हैं. उदाहरण के लिए, नेविगेशन कॉम्पोनेंट का इस्तेमाल, लिखने के लिए किया जा सकता है. व्यू, फ़्रैगमेंट, ऐक्टिविटी, और यहां तक कि कस्टम यूज़र इंटरफ़ेस (यूआई) फ़्रेमवर्क.

इस गाइड में यह बताया गया है कि नेविगेशन कॉम्पोनेंट का इस्तेमाल करके, डेस्टिनेशन पर मिलती है.

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() को पास करें.

इसके उदाहरण के लिए, यहां दिया गया सब-सेक्शन देखें.

उदाहरण

पहले के सेक्शन में बताए गए तरीके से, इन बिंदुओं को अब स्निपेट:

  1. ग्राफ़ में हर डेस्टिनेशन को एक रूट का इस्तेमाल करके बनाया जाता है, जो इसके लिए ज़रूरी डेटा की जानकारी देने वाला, क्रम से लगाया जा सकने वाला ऑब्जेक्ट या क्लास गंतव्य.
  2. MyAppNavHost कंपोज़ेबल में NavController इंस्टेंस होता है.
  3. इसी तरह, navigate() पर किए जाने वाले कॉल वहां होने चाहिए, न कि उनकी संख्या कंपोज़ेबल. जैसे, ProfileScreen.
  4. ProfileScreen में ऐसा बटन होता है जो उपयोगकर्ता को FriendsList पर ले जाता है क्लिक करें. हालांकि, वह खुद navigate() को कॉल नहीं करता.
  5. इसके बजाय, यह बटन ऐसे फ़ंक्शन को कॉल करता है जो पैरामीटर के तौर पर दिखता है onNavigateToFriends.
  6. जब MyAppNavHost, नेविगेशन ग्राफ़ में ProfileScreen को जोड़ता है, onNavigateToFriends के लिए, यह Lambda फ़ंक्शन को navigate(route = FriendsList से कॉल करता है).
  7. इससे यह पक्का होता है कि जब लोग 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() का इस्तेमाल इस्तेमाल के सामान्य उदाहरण. हालांकि, फ़ंक्शन में कई ओवरलोड हैं का इस्तेमाल अलग-अलग कॉन्टेक्स्ट में करता है. साथ ही, किसी यूज़र इंटरफ़ेस (यूआई) फ़्रेमवर्क के साथ मिलकर भी इस्तेमाल किया जा सकता है. ज़्यादा जानकारी के लिए, इन ओवरलोड के बारे में ज़्यादा जानकारी के लिए, रेफ़रंस दस्तावेज़.

इसके बारे में और पढ़ें

ज़्यादा जानकारी के लिए, ये पेज देखें: