একটি গন্তব্যে নেভিগেট করুন

নেভিগেশন উপাদান একটি গন্তব্যে নেভিগেট করার একটি সরল এবং সাধারণ উপায় প্রদান করে। এই ইন্টারফেসটি বিভিন্ন প্রসঙ্গ এবং UI ফ্রেমওয়ার্ক সমর্থন করে। উদাহরণস্বরূপ, আপনি রচনা, দৃশ্য, টুকরা, কার্যকলাপ এবং এমনকি কাস্টম UI ফ্রেমওয়ার্ক সহ নেভিগেশন উপাদান ব্যবহার করতে পারেন।

এই নির্দেশিকা বর্ণনা করে কিভাবে আপনি বিভিন্ন প্রসঙ্গে একটি গন্তব্যে নেভিগেট করতে নেভিগেশন উপাদান ব্যবহার করতে পারেন।

একটি NavController ব্যবহার করুন

গন্তব্যের মধ্যে স্থানান্তর করার জন্য আপনি যে মূল প্রকারটি ব্যবহার করেন তা হল NavController ৷ ক্লাস নিজেই এবং কীভাবে এটির একটি উদাহরণ তৈরি করতে হয় সে সম্পর্কে আরও তথ্যের জন্য একটি নেভিগেশন কন্ট্রোলার তৈরি করুন দেখুন। এই নির্দেশিকাটি কীভাবে এটি ব্যবহার করবেন তার বিশদ বিবরণ।

আপনি যে UI ফ্রেমওয়ার্ক ব্যবহার করুন না কেন, একটি গন্তব্যে নেভিগেট করতে আপনি ব্যবহার করতে পারেন এমন একটি ফাংশন রয়েছে: NavController.navigate()

navigate() এর জন্য অনেক ওভারলোড উপলব্ধ রয়েছে। আপনার যে ওভারলোডটি বেছে নেওয়া উচিত তা আপনার সঠিক প্রসঙ্গের সাথে মিলে যায়। উদাহরণস্বরূপ, একটি কম্পোজেবল নেভিগেট করার সময় আপনার একটি ওভারলোড ব্যবহার করা উচিত এবং একটি দৃশ্যে নেভিগেট করার সময় অন্যটি ব্যবহার করা উচিত।

নিম্নলিখিত বিভাগগুলি আপনি ব্যবহার করতে পারেন এমন কিছু কী navigate() ওভারলোডের রূপরেখা দেয়।

একটি কম্পোজেবল নেভিগেট করুন

একটি কম্পোজেবল নেভিগেট করতে, আপনাকে NavController.navigate<T> ব্যবহার করা উচিত। এই ওভারলোডের সাথে, navigate() একটি একক route আর্গুমেন্ট নেয় যার জন্য আপনি একটি টাইপ পাস করেন। এটি একটি গন্তব্যের চাবিকাঠি হিসাবে কাজ করে।

@Serializable
object FriendsList

navController.navigate(route = FriendsList)

নেভিগেশন গ্রাফে একটি কম্পোজেবল নেভিগেট করতে, প্রথমে আপনার NavGraph সংজ্ঞায়িত করুন যাতে প্রতিটি গন্তব্য একটি প্রকারের সাথে মিলে যায় । কম্পোজেবলের জন্য, আপনি composable() ফাংশন দিয়ে তা করেন।

আপনার কম্পোজেবল থেকে ঘটনা প্রকাশ করুন

যখন একটি কম্পোজযোগ্য ফাংশন একটি নতুন স্ক্রিনে নেভিগেট করার প্রয়োজন হয়, তখন আপনার এটিকে NavController এ একটি রেফারেন্স দেওয়া উচিত নয় যাতে এটি সরাসরি navigate() কল করতে পারে। ইউনিডাইরেশনাল ডেটা ফ্লো (UDF) নীতি অনুসারে, কম্পোজেবলের পরিবর্তে এমন একটি ঘটনা প্রকাশ করা উচিত যা NavController পরিচালনা করে।

আরও সরাসরি বললে, আপনার কম্পোজেবলের টাইপ () -> Unit একটি প্যারামিটার থাকা উচিত। যখন আপনি composable() ফাংশন দিয়ে আপনার NavHost এ গন্তব্য যোগ করেন, তখন আপনার কম্পোজেবলকে NavController.navigate() এ একটি কল পাঠান।

এই উদাহরণের জন্য নিম্নলিখিত উপধারা দেখুন.

উদাহরণ

পূর্ববর্তী বিভাগগুলির একটি প্রদর্শন হিসাবে, নিম্নলিখিত স্নিপেটে এই পয়েন্টগুলি পর্যবেক্ষণ করুন:

  1. গ্রাফের প্রতিটি গন্তব্য একটি রুট ব্যবহার করে তৈরি করা হয়েছে, যা একটি সিরিয়ালাইজেবল অবজেক্ট বা ক্লাস যা সেই গন্তব্যের জন্য প্রয়োজনীয় ডেটা বর্ণনা করে।
  2. MyAppNavHost কম্পোজেবল NavController দৃষ্টান্ত ধারণ করে।
  3. তদনুসারে, navigate() জন্য কলগুলি সেখানে হওয়া উচিত এবং ProfileScreen এর মতো নিম্ন কম্পোজেবলে নয়।
  4. ProfileScreen একটি বোতাম রয়েছে যা ক্লিক করলে ব্যবহারকারীকে FriendsList তালিকায় নেভিগেট করে। যাইহোক, এটি নিজেই navigate() কল করে না।
  5. পরিবর্তে, বোতামটি এমন একটি ফাংশনকে কল করে যা onNavigateToFriends প্যারামিটার হিসাবে উন্মুক্ত।
  6. যখন MyAppNavHost নেভিগেশন গ্রাফে ProfileScreen যোগ করে, তখন onNavigateToFriends জন্য এটি একটি ল্যাম্বডা পাস করে যা 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 এ নেভিগেট করতে এই ওভারলোড ব্যবহার করতে পারেন:

কোটলিন

viewTransactionsButton.setOnClickListener { view ->
  view.findNavController().navigate(R.id.viewTransactionsAction)
}

জাভা

viewTransactionsButton.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View view) {
      Navigation.findNavController(view).navigate(R.id.viewTransactionsAction);
  }
});

আইডি ব্যবহার করে নেভিগেট করার সময়, আপনার যেখানে সম্ভব অ্যাকশন ব্যবহার করা উচিত। ক্রিয়াগুলি আপনার নেভিগেশন গ্রাফে অতিরিক্ত তথ্য প্রদান করে, আপনার গন্তব্যগুলি একে অপরের সাথে কীভাবে সংযোগ করে তা দৃশ্যত দেখায়।

NavDeepLinkRequest ব্যবহার করে নেভিগেট করুন

একটি অন্তর্নিহিত গভীর লিঙ্ক গন্তব্যে নেভিগেট করতে, navigate(NavDeepLinkRequest) ওভারলোড ব্যবহার করুন। নিম্নলিখিত স্নিপেট এই পদ্ধতির একটি বাস্তবায়ন প্রদান করে:

কোটলিন

val request = NavDeepLinkRequest.Builder
  .fromUri("android-app://androidx.navigation.app/profile".toUri())
  .build()
findNavController().navigate(request)

জাভা

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 সঠিকভাবে একটি অন্তর্নিহিত গভীর লিঙ্কের গন্তব্যের সাথে মেলে, URI, অ্যাকশন এবং MIME টাইপ অবশ্যই গন্তব্যের NavDeepLink সাথে মেলে। ইউআরআইগুলি অবশ্যই প্যাটার্নের সাথে মেলে, ক্রিয়াগুলি অবশ্যই একটি সঠিক মিল হতে হবে এবং MIME প্রকারগুলি অবশ্যই সম্পর্কিত হতে হবে৷ উদাহরণস্বরূপ, image/jpg image/\* এর সাথে মেলে

আরও প্রসঙ্গ

এই নথিটি সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে NavController.navigate() কীভাবে ব্যবহার করতে হয় তা কভার করে। যাইহোক, ফাংশনটিতে ওভারলোডের একটি পরিসীমা রয়েছে যা আপনি বিভিন্ন প্রসঙ্গে এবং যেকোনো Ui ফ্রেমওয়ার্কের সাথে মিল রেখে ব্যবহার করতে পারেন। এই ওভারলোডগুলির উপর আরো বিস্তারিত জানার জন্য রেফারেন্স ডকুমেন্টেশন দেখুন।

আরও পড়া

আরও তথ্যের জন্য, নিম্নলিখিত পৃষ্ঠাগুলি দেখুন: