আপনার নেভিগেশন গ্রাফে, একটি গন্তব্য একটি কার্যকলাপ হতে পারে। যদিও আপনার অ্যাপে একটি একক ক্রিয়াকলাপ থাকা সর্বোত্তম অনুশীলন, অ্যাপগুলি প্রায়শই একটি অ্যাপের মধ্যে স্বতন্ত্র উপাদান বা স্ক্রিনের জন্য পৃথক কার্যকলাপ ব্যবহার করে। কার্যকলাপ গন্তব্য এই ধরনের ক্ষেত্রে দরকারী হতে পারে.
রচনা এবং Kotlin DSL
আপনার নেভিগেশন গ্রাফে একটি কার্যকলাপের গন্তব্য যোগ করা মূলত একই রকম হয় যখন রচনা করুন এবং যখন টুকরো টুকরো সহ Kotlin DSL ব্যবহার করুন। এর কারণ হল আপনার NavGraph
আপনার NavHost
কম্পোজেবলে পাস করার সময়, আপনি একই createGraph()
lambda ব্যবহার করেন।
আরও তথ্যের জন্য, Kotlin DSL ব্যবহার করে প্রোগ্রাম্যাটিকভাবে একটি গ্রাফ তৈরি করুন দেখুন।
এক্সএমএল
একটি কার্যকলাপ গন্তব্য তৈরি করা একটি খণ্ড গন্তব্য তৈরির অনুরূপ। যাইহোক, একটি কার্যকলাপ গন্তব্য প্রকৃতি বেশ ভিন্ন.
ডিফল্টরূপে, নেভিগেশন লাইব্রেরি 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>
এই XML নিম্নলিখিত কল to startActivity()
এর সমতুল্য:
কোটলিন
startActivity(Intent(context, DestinationActivity::class.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>
বর্তমান applicationId
আইডিতে targetPackage
নির্দিষ্ট করা বর্তমান অ্যাপ্লিকেশনের সুযোগকে সীমিত করে, যার মধ্যে প্রধান অ্যাপ রয়েছে।
একই প্রক্রিয়াটি এমন ক্ষেত্রে ব্যবহার করা যেতে পারে যেখানে আপনি একটি নির্দিষ্ট অ্যাপকে গন্তব্য হতে চান। নিম্নলিখিত উদাহরণটি 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>
গতিশীল আর্গুমেন্ট
পূর্ববর্তী উদাহরণগুলি গন্তব্যে নেভিগেট করতে স্থির URL ব্যবহার করেছে৷ আপনাকে ডায়নামিক ইউআরএল সমর্থন করতে হতে পারে যেখানে ইউআরএলের অংশ হিসেবে অতিরিক্ত তথ্য পাঠানো হয়। উদাহরণ স্বরূপ, আপনি https://example.com?userId=<actual user ID>
এর মত বিন্যাস সহ একটি URL-এ একটি ব্যবহারকারী আইডি পাঠাতে পারেন।
এই ক্ষেত্রে, 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>
এই উদাহরণে, আপনি নিরাপদ আর্গস বা Bundle
ব্যবহার করে একটি userId
মান নির্দিষ্ট করতে পারেন:
কোটলিন
navController.navigate(
R.id.localDestinationActivity,
bundleOf("userId" to "someUser")
)
জাভা
Bundle args = new Bundle();
args.putString("userId", "someUser");
navController.navigate(R.id.localDestinationActivity, args);
এই উদাহরণটি {userId}
এর জন্য someUser
প্রতিস্থাপন করে এবং https://example.com?userId=someUser
এর একটি URI মান তৈরি করে।