आपके नेविगेशन ग्राफ़ में, डेस्टिनेशन को कोई गतिविधि माना जा सकता है. हालांकि, यह सबसे अच्छा है कोई एक गतिविधि होती है, तो ऐप्लिकेशन अक्सर अलग-अलग ऐप्लिकेशन में अलग-अलग कॉम्पोनेंट या स्क्रीन के लिए अलग-अलग गतिविधियां. Gemini पर आपकी गतिविधि डेस्टिनेशन ऐसे मामलों में फ़ायदेमंद साबित हो सकते हैं.
Compose और Kotlin DSL
अपने नेविगेशन ग्राफ़ में गतिविधि के डेस्टिनेशन जोड़ने का काम एक जैसा ही है
फ़्रैगमेंट के साथ 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
.