आपके नेविगेशन ग्राफ़ में, डेस्टिनेशन को कोई गतिविधि माना जा सकता है. हालांकि, यह सबसे अच्छा है कोई एक गतिविधि होती है, तो ऐप्लिकेशन अक्सर अलग-अलग ऐप्लिकेशन में अलग-अलग कॉम्पोनेंट या स्क्रीन के लिए अलग-अलग गतिविधियां. Gemini पर आपकी गतिविधि डेस्टिनेशन ऐसे मामलों में फ़ायदेमंद साबित हो सकते हैं.
Compose और Kotlin DSL
अपने नेविगेशन ग्राफ़ में ऐक्टिविटी डेस्टिनेशन जोड़ने का तरीका, Compose और फ़्रैगमेंट के साथ Kotlin DSL का इस्तेमाल करने पर, दोनों में एक जैसा ही होता है. ऐसा इसलिए है, क्योंकि
अपने NavGraph
को अपने NavHost
कंपोज़ेबल में पास करने पर,
createGraph()
लैम्डा.
ज़्यादा जानकारी के लिए, फ़्रैगमेंट और Kotlin DSL देखें.
XML
गतिविधि का डेस्टिनेशन बनाना, फ़्रैगमेंट बनाने जैसा ही है गंतव्य. हालांकि, गतिविधि गंतव्य की प्रकृति काफ़ी अलग हैं.
डिफ़ॉल्ट रूप से, नेविगेशन लाइब्रेरी NavController
को
Activity
लेआउट और चालू नेविगेशन ग्राफ़ को
Activity
. अगर कोई उपयोगकर्ता किसी दूसरे Activity
पर जाता है, तो मौजूदा नेविगेशन ग्राफ़ अब दायरे में नहीं आता. इसका मतलब है कि Activity
डेस्टिनेशन को नेविगेशन ग्राफ़ में एंडपॉइंट माना जाना चाहिए.
गतिविधि का डेस्टिनेशन जोड़ने के लिए, डेस्टिनेशन Activity
के साथ पूरी तरह से क्वालिफ़ाइड क्लास का नाम बताएं:
<?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/navigation_graph" app:startDestination="@id/simpleFragment"> <activity android:id="@+id/sampleActivityDestination" android:name="com.example.android.navigation.activity.DestinationActivity" android:label="@string/sampleActivityTitle" /> </navigation>
यह एक्सएमएल, startActivity()
को दिए गए कॉल के बराबर है:
Kotlin
startActivity(Intent(context, DestinationActivity::class.java))
Java
startActivity(new Intent(context, DestinationActivity.class));
कुछ मामलों में, ऐसा भी हो सकता है कि यह तरीका सही न हो. उदाहरण के लिए, आपके
शायद आपकी ऐक्टिविटी क्लास पर कंपाइल-टाइम डिपेंडेंसी न हो या
इंप्लिसिट इंटेंट के ज़रिए जाने के लिए, इनडायरेक्ट लेवल को प्राथमिकता दी जाती है. कॉन्टेंट बनाने
Activity
डेस्टिनेशन की मेनिफ़ेस्ट एंट्री में intent-filter
तय करता है कि आपको Activity
डेस्टिनेशन को कैसे स्ट्रक्चर करना है.
उदाहरण के लिए, यहां दी गई मेनिफ़ेस्ट फ़ाइल देखें:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.navigation.activity">
<application>
<activity android:name=".DestinationActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data
android:host="example.com"
android:scheme="https" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
इससे जुड़े Activity
डेस्टिनेशन को कॉन्फ़िगर करना ज़रूरी है
action
और data
एट्रिब्यूट, मेनिफ़ेस्ट एंट्री में मौजूद एट्रिब्यूट से मेल खाते हैं:
<?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/navigation_graph" app:startDestination="@id/simpleFragment"> <activity android:id="@+id/localDestinationActivity" android:label="@string/localActivityTitle" app:action="android.intent.action.VIEW" app:data="https://example.com" app:targetPackage="${applicationId}" /> </navigation>
targetPackage
को मौजूदा applicationId
में तय करने से,
मौजूदा ऐप्लिकेशन का स्कोप जिसमें मुख्य ऐप्लिकेशन शामिल हो.
इस तरीके का इस्तेमाल उन मामलों में भी किया जा सकता है जहां आपको किसी खास ऐप्लिकेशन को डेस्टिनेशन बनाना है. नीचे दिए गए उदाहरण में, डेस्टिनेशन को एक ऐसा ऐप्लिकेशन बताया गया है जिसमें
com.example.android.another.app
में से applicationId
आइटम.
<?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/navigation_graph" app:startDestination="@id/simpleFragment"> <activity android:id="@+id/localDestinationActivity" android:label="@string/localActivityTitle" app:action="android.intent.action.VIEW" app:data="https://example.com" app:targetPackage="com.example.android.another.app" /> </navigation>
डाइनैमिक आर्ग्युमेंट
पिछले उदाहरणों में, डेस्टिनेशन पर जाने के लिए तय यूआरएल का इस्तेमाल किया गया था. आपको डाइनैमिक यूआरएल के साथ भी काम करना पड़ सकता है. इनमें यूआरएल के हिस्से के तौर पर ज़्यादा जानकारी भेजी जाती है. उदाहरण के लिए, यूज़र आईडी को इससे मिलते-जुलते फ़ॉर्मैट में भी भेजा जा सकता है
https://example.com?userId=<actual user ID>
.
इस मामले में, data
एट्रिब्यूट के बजाय, dataPattern
का इस्तेमाल करें.
इसके बाद, नाम वाले प्लेसहोल्डर की जगह इस्तेमाल किए जाने वाले आर्ग्युमेंट दिए जा सकते हैं
dataPattern
वैल्यू:
<?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/navigation_graph" app:startDestination="@id/simpleFragment"> <activity android:id="@+id/localDestinationActivity" android:label="@string/localActivityTitle" app:action="android.intent.action.VIEW" app:dataPattern="https://example.com?userId={userId}" app:targetPackage="com.example.android.another.app"> <argument android:name="userId" app:argType="string" /> </activity> </navigation>
इस उदाहरण में, Safe Args में से किसी एक का इस्तेमाल करके, userId
वैल्यू तय की जा सकती है
या Bundle
के साथ:
Kotlin
navController.navigate(
R.id.localDestinationActivity,
bundleOf("userId" to "someUser")
)
Java
Bundle args = new Bundle();
args.putString("userId", "someUser");
navController.navigate(R.id.localDestinationActivity, args);
यह उदाहरण someUser
को {userId}
से बदल देता है और एक यूआरआई मान बनाता है
https://example.com?userId=someUser
.