Jetpack組件Navigation導航的一些概念

1.基本概念

navigation: 導航
navHost: 是一個容器或者控制器,裏面放fragment
fragment: 碎片化屏幕,一個activity可以有多個fragment,是一種容器,裏面可以放navHost
navController: 控制導航的邏輯,驅動導航圖
navGraph: 導航圖

2.導航代碼

基本設置完成之後,跳轉代碼:(以下代碼都是放在監聽事件中的)

//獲取navController
val navController = Navigation.findNavController(v)
//跳轉
navController.navigate(R.id.action_searchFragment_to_galleryFragment)

或者這樣寫:

//方式一
Navigation.findNavController(v).navigate(R.id.action_searchFragment_to_galleryFragment)
//方式二
Navigation.findNavController(requireActivity(), R.id.fragment).navigate(R.id.action_searchFragment_to_galleryFragment)
//方式三
Navigation.createNavigateOnClickListener(R.id.action_searchFragment_to_galleryFragment)

3.傳遞參數

//在一個fragment中設置要傳遞的參數
//TextView監聽事件
textViewCancel.setOnClickListener {
    //要傳遞一個字符串“yourStr”
    val yourStr = "yourStr"
    val bundle = Bundle()
    bundle.putString("YOUR_STR", yourStr)
    //頁面跳轉
    Navigation.createNavigateOnClickListener(R.id.action_searchFragment_to_galleryFragment, bundle)
}

//在另一個fragment中獲取參數(在onCreateView中或者其他)
val str = arguments.get("YOUR_STR") as String //as是類型轉換

此外,如果你使用了ViewModel來管理數據,就不需要在多個Fragment之間傳遞數據了,因爲在不同fragment中請求回來的是一個ViewModel,能共享數據(fragment中應在onCreateView中,配置ViewModel和DataBinding),ViewModel的使用可以參考另一篇博文,附帶Demo

具體Navigation實操可以去看這個UP主的視頻,非常好:https://www.bilibili.com/video/av57646155(建議2倍食用)

發佈了92 篇原創文章 · 獲贊 40 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章