您当前的位置: 首页 >  android jetpack

Kevin-Dev

暂无认证

  • 0浏览

    0关注

    544博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Android Jetpack学习之旅】--> Navigation 的使用

Kevin-Dev 发布时间:2022-04-28 08:15:00 ,浏览量:0

不断学习,做更好的自己!💪

视频号CSDN简书欢迎打开微信,关注我的视频号:KevinDev点我点我 简介

1. 定义 Navigation 是一个可简化 Android 导航的库和插件;更确切的来说,Navigation是用来管理 Fragment 的切换,并且可以通过可视化的方式,看见 App 的交互流程。这完美的契合了 Jake Wharton 大神单 Activity 的建议。

2. 优点

  • 处理 Fragment 的切换
  • 默认情况下正确处理 Fragment 的前进和后退
  • 为过渡和动画提供标准化的资源
  • 实现和处理深层连接
  • 可以绑定 ToolbarBottomNavigationViewActionBar
  • SafeArgs(Gradle插件) 数据传递时提供类型安全性
  • ViewModel 支持

3. 前期准备 Android studio 版本需要 3.2+

4. 学习资料

  • 谷歌官方教程:Navigation Codelab
  • 谷歌官方文档:Navigation
  • 官方 Demo:Demo地址
实践

0. 效果图 请添加图片描述

1. 添加依赖 在根目录的 build.gradle 添加:

buildscript {
    ext {
        kotlinVersion = '1.6.10'
        appCompatVersion = "1.4.0"
        recyclerVersion = "1.2.1"
        materialVersion = "1.4.0"
        navigationVersion = "2.3.5"
        constraintLayoutVersion = "2.1.2"
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:7.0.4'
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigationVersion"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"

    }
}

app/build.gradle 添加:

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'androidx.navigation.safeargs.kotlin'
}
dependencies {
    ...
    //Navigation
    implementation "androidx.navigation:navigation-fragment-ktx:$rootProject.navigationVersion"
    implementation "androidx.navigation:navigation-ui-ktx:$rootProject.navigationVersion"

}

2. 创建 navigation 导航 创建基础目录:资源文件 res 目录下创建 navigation 目录 -> 右击 navigation 目录 New 一个Navigation resource file





	

	
		
		
	

	

		
	

创建一个 Destination,如果说 navigation是我们的导航工具,Destination 是我们的目的地,在此之前,我已经写好了一个 WelcomeFragmentLoginFragmentRegisterFragment,添加Destination 的操作完成后如下所示 在这里插入图片描述 3. 建立 NavHostFragment 我们创建一个新的 LoginActivity,在 activity_login.xml 文件中:




    


4. 界面跳转、参数传递和动画 在 WelcomeFragment 中,点击登录和注册按钮可以分别跳转到 LoginFragmentRegisterFragment 中。 在这里插入图片描述 方式一 利用 ID 导航 目标:WelcomeFragment 携带 keyname 的数据跳转到 LoginFragmentLoginFragment 接收后显示。 Have a account ? Login 按钮的点击事件如下:

btnLogin.setOnClickListener {
            // 设置动画参数
            val navOption = navOptions {
                anim {
                    enter = R.anim.common_slide_in_right
                    exit = R.anim.common_slide_out_left
                    popEnter = R.anim.common_slide_in_left
                    popExit = R.anim.common_slide_out_right
                }
            }

            val name = AppPrefsUtils.getString(BaseConstant.SP_USER_NAME)
            // Navigation 传递参数
            val bundle = Bundle()
            bundle.putString(BaseConstant.ARGS_NAME,name)
            findNavController().navigate(R.id.login, bundle,navOption)
        }

方式二 利用 Safe Args 目标:WelcomeFragment 通过 Safe Args 将数据传到 RegisterFragmentRegisterFragment 接收后显示。 再看一下已经展示过的 login_navigation.xml



    

    
        
        
    

    

        
    

5. 更多 Navigation 可以绑定 menusdrawersbottom navigation,这里我们以 bottom navigation 为例,我先在 navigation 目录下新创建了 main_navigation.xml,接着新建了 MainActivity,下面则是activity_main.xml:



    

    


MainActivity 中的处理也十分简单:

class MainActivity : AppCompatActivity() {

    lateinit var bottomNavigationView: BottomNavigationView

    override fun onCreate(savedInstanceState: Bundle?) {
        //...
        val host: NavHostFragment = supportFragmentManager.findFragmentById(R.id.my_nav_host_fragment) as NavHostFragment
        val navController = host.navController
        initWidget()
        initBottomNavigationView(bottomNavigationView,navController)
    }

    private fun initBottomNavigationView(bottomNavigationView: BottomNavigationView, navController: NavController) {
        bottomNavigationView.setupWithNavController(navController)
    }

    private fun initWidget() {
        bottomNavigationView = findViewById(R.id.navigation_view)
    }
}

效果: 在这里插入图片描述

小结

在这里插入图片描述

关注
打赏
1658837700
查看更多评论
立即登录/注册

微信扫码登录

0.0465s