Published on

Android Jetpack Navigation: Kiến Thức Cần Biết

Authors

Mỗi ứng dụng Android sẽ chứa rất nhiều màn hình. Việc Navigate giữa các màn hình cần được quản lý chặt chẽ, đồng thời phải dễ dàng cho lập trình viên. Jetpack Navigation được tạo ra với mục đích này. Một số tính năng của Jetpack Navigation sẽ giúp bạn phát triển ứng dụng nhanh hơn.

Kiến thức cần nắm trước khi học đến phần này: Android Activity Lifecycle, Android View System

  • Define trước các Fragment và sự liên kết giữa chúng thông qua Navigation Id
  • Tùy biến Navigation đến một Fragment cụ thể nhờ tính năng Deep-link
  • Hỗ trợ quản lý Fragment Back Stack (support multiple backstack) trong Activity (cực kỳ hữu ích)

Bài viết này sẽ hướng dẫn bạn tích hợp Jetpack Navigation Component vào dự án và sử dụng một cách dễ dàng!

GitHub Repository: https://github.com/dantech0xff/SpotifyKt

Thêm Nav Graph vào trong Activity

// Jetpack Nav
// Thêm dependencies vào build.gradle module app
implementation("androidx.navigation:navigation-fragment-ktx:2.7.7")
implementation("androidx.navigation:navigation-ui-ktx:2.7.7")
// Thêm NavHostFragment vào Activity của bạn

// Tạo các Fragment và setup chúng trong file mobile_navigation.xml

Với mỗi Fragment tạo thêm bạn cần tạo thêm 1 fragment bên trong mobile_navigation

Để tạo liên kết navigation giữa 2 fragment bạn có thể thực hiện kéo thả bên trong Visualize Panel, code sẽ được tạo ra như bên dưới.

Ngoài ra bạn cũng có thể navigate đến một Fragment thông qua việc định nghĩa 1 deep-link cho nó.


    // khai bao deeplink phuc vu cho deeplink navigation

// Để thực hiện navigation theo một Nav Id bạn có thể gọi trong dự án như sau
findNavController()
	.navigate(R.id.action_navigation_search_to_searchResultFragment)
// Để thực hiện navigation theo một Nav Deep-link bạn có thể gọi trong dự án như sau
fun NavController.handleDeeplinkInternal(deeplink: String?): Boolean {
    return graph.hasDeepLink(android.net.Uri.parse(deeplink)).let { hasDeepLink ->
        if (hasDeepLink) {
            navigate(
                android.net.Uri.parse(deeplink), NavOptions.Builder()
                    .setEnterAnim(R.anim.fade_in_anim)
                    .setExitAnim(R.anim.fade_out_anim)
                    .setPopEnterAnim(R.anim.fade_in_anim)
                    .setPopExitAnim(R.anim.fade_out_anim)
                    .build()
            )
        }
        hasDeepLink
    }
}

Về cơ bản Jetpack Navigation chỉ có thế. Để ứng dụng hiệu quả các công năng của Jetpack Navigation bạn hãy tham khảo qua source code tại đây.