• Android开发基础教程(2019)第17集 页面导航 Navigation(1)笔记


    Navigation 基础知识概述

    • NavHost 装碎片的容器
    • Fragment 碎片,用于在界面上设置一小块布局
    • NavController 用来控制碎片切换逻辑
    • NavGraph 图形化设置页面切换逻辑

    例子

    1. 两碎片,布局分别是一个按钮一个标签
    2. developers中将navigation的依赖添加进来
    3. 设置resourceFile->navigation(my_nav_graph),将刚刚添加的两个碎片相互连线
    4. 在主布局中放置NavHostFragment
    5. 在碎片中添加跳转的代码,两种方式实现相同的功能
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
            button1.setOnClickListener {
                val controller = Navigation.findNavController(it)
                controller.navigate(R.id.action_homeFragment_to_detailFragment)
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
            button2.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_detailFragment_to_homeFragment))
        }
    
    • 1
    • 2
    • 3
    • 4
    1. 设置页面切换的过渡效果,my_nav_graph.xml -> 点线 -> Animation -> 设置enterAnim和exitAnim,可以弄默认动画
    2. 设置第二个碎片的setupActionBar
    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            //先拿NavHostFragment
            val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragmentContainerView) as NavHostFragment
            //再拿NavController
            val controller : NavController = navHostFragment.navController
            NavigationUI.setupActionBarWithNavController( this,controller)
        }
    
        override fun onSupportNavigateUp(): Boolean {
            //先拿NavHostFragment
            val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragmentContainerView) as NavHostFragment
            //再拿NavController
            val controller : NavController = navHostFragment.navController
            return controller.navigateUp()
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    1. 设置导航栏的标签,resourceFile->navigation(my_nav_graph)->点碎片->label 修改即可

    效果展示

    在这里插入图片描述

  • 相关阅读:
    自动化项目实战 [个人博客系统]
    Vue学习—基本语法
    绝对路径和相对路径
    十一、指针
    C++如何取出打印std::vector<cv::KeyPoint>的第0号元素
    【12】基础知识:React ajax
    SpringBoot配置文件
    GBASE 8s 数据库复合索引
    移动端应用(APP)如何设计测试用例?
    用JAVA语言编写下面程序
  • 原文地址:https://blog.csdn.net/qq_61735602/article/details/127452469