Navigation Component
نویگیشن کامپوننت که یکی از زیر مجموعه های لایبرری Jetpack به شمار میره، برای این به وجود اومده که کار با فرگمنت ها رو ساده کنه. عمدتا از نویگیشن کامپوننت در اپ های single activity استفاده میشه.
نویگیشن کامپوننت دارای سه قسمت است:
1. Navigation graph: این قسمت یک فایل XML بوده و شامل Destination و Action می باشد.
- Destination: هر فرگمنتی که کاربر میتونه به اونجا بره.
- Action: مسیر رفت و آمد بین Destinationها.
برای ساخت این فایل که بصورت گرافیکی هست، در قسمت ریسورس یک دایرکتوری برای navigation میسازیم.
2. NavHost: کانتینر برای Destinationها. معمولا از ویوی fragment استفاده میشه ولی توی داکیومنت های اندروید از androidx.fragment.app.FragmentContainerView استفاده کرده. منم اینو گذاشتم ولی توی صفحه navigation graph به عنوان Host نمیشناسه. سرچ کردم احتمالا باگه و در نهایت از همون fragment استفاده کردم.
3. NavController: کنترل کننده نویگیشن ها. کد به این صورت هست (از سایت اندروید):
// File: HomeFragment.java
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
// For example purposes, assume our layout created in onCreateView has a Button
// that should navigate the user to a destination
Button b = view.findViewById(R.id.view_details);
b.setOnClickListener(v -> {
// Retrieve the NavController from any View within a NavHost توضیح در پایین
NavController navController = Navigation.findNavController(v);
navController.navigate(R.id.details));
}
// Or use the convenience method in Navigation to combine the previous steps
b.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.details));
}
توضیح:
ما به جای ویو میتونیم ویوی inflate شده در فرگمنت یا حتی یکی از ویوها که در کانتینر قرار میگیره (مثلا مثل باتن) رو پاس بدیم. مثل کد بالا.
در آرگومان
navController.navigate(R.id.details));
آی دی اکشن رو پاس میدیم.
از روش دوم خوشم نمیاد :|
انیمیشن برای وارد شدن و خارج شدن فرگمنت :
میتوان برای ورود و خروجی هر فرگمنت و یا ورود و خروج فرگمنت پاپ شده انیمیشن تعریف کرد و از طریق اتریبیوت های زیر در تگ action آن را اضافه کرد.
- enterAnim
- exitAnim
- popEnterAnim
- popExitAnim
بحث safe args هم هست که من فعلا بهش نیازی نداشتم.
اکثر آموزش و فیلم های یوتیوب برای نویگیشن ویو به زبان کاتلین هستن. چند تا جاوا پیدا کردم:
آموزش نویگیشن کامپوننت - سایت اندروید