Navigation的组件的使用

  • Navigation的主要元素
    Navigation Graph:XML资源文件,包含应用程序的所有页面,以及页面的关系,
    NavHostFragment:其他fragment的容器,Navigation Graph中的fragment正是通过NavHostFragment进行展示的
    NavController:完成Navigation Graph中具体页面的切换工作
    总结:使用NavController对象切换fragment,Navigation Graph是明确去那个fragment,NavController把想去的fragment展示在NavHostFragment中
    具体使用:
    首先,添加依赖:
implementation 'androidx.navigation:navigation-fragment-ktx:2.4.1'
 implementation 'androidx.navigation:navigation-ui-ktx:2.4.1'

第一步:建立Navigation Graph的资源文件nav_graph


截屏2023-03-09 11.23.25.png

这个操作很简单可以直接点击想去的fragment
截屏2023-03-09 11.25.37.png


    

        
    
    

        
    

action和destination完成页面导航
startDestination:表示开始的fragment
第二步:在activity中创建NavHostFragment文件



    

app:defaultNavHost="true"则系统会自定处理fragment的返回键
app:navGraph="@navigation/nav_graph" 设置该fragment的导航
第三步:使用NavController完成导航,通过代码实现具体的跳转
在fragment中添加一个button

  //方法一:
   binding.buttonFirst.setOnClickListener {
        findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment)
        }
//方法二:
  binding.buttonFirst.setOnClickListener { 
          Navigation.createNavigateOnClickListener(R.id.action_SecondFragment_to_FirstFragment)
        }

第四步:添加动画:点击箭头直接添加动画


截屏2023-03-09 11.41.17.png

第五步:传递参数
fragmentFirst的代码(传参数):

 val bundle=Bundle()
        bundle.putString("name","张三")
        bundle.putInt("age",20)
        binding.buttonFirst.setOnClickListener {
            findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment,bundle)
        }

fragmentSecond获取参数

 val bundle=arguments
        if (bundle!=null){
            val name=bundle.getString("name")
            val age=bundle.getInt("age")
            binding.textviewSecond.text="name:$name,age:$age"
        }

你可能感兴趣的:(Navigation的组件的使用)