无名之辈的Android之路

Android日志——Navigation

2021-08-01  本文已影响0人  搬码人

Navigation简介

Navigation是一个框架,用于Android应用中的“目标”之间的导航,该框架提供一致的API,无论目标是作为Fragment、Activity还是其他组件的实现。

声明依赖项

def nav_version声明版本号,下方根据需要导入不同的依赖

dependencies {
  def nav_version = "2.3.5"

  // Java language implementation
  implementation "androidx.navigation:navigation-fragment:$nav_version"
  implementation "androidx.navigation:navigation-ui:$nav_version"

  // Kotlin
  implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
  implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

  // Feature module Support
  implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

  // Testing Navigation
  androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"

  // Jetpack Compose Integration
  implementation "androidx.navigation:navigation-compose:2.4.0-alpha04"
}
Safe Args

用于在目的地之间传递数据

buildscript {
    repositories {
        google()
    }
    dependencies {
        def nav_version = "2.3.5"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}
image.png

这里我使用的是kotlin语言,所以导入 apply plugin: "androidx.navigation.safeargs.kotlin"

image.png
image.png

实际应用

这里通过一个简单的美食项目来对navigation做更深层次的理解

创建fragment(两种)
第一种
使用系统提供的。根据需要选择,这里我使用Blank,之后删除多余的代码行。

image.png image.png

第二种
自己创建
创建相应的xml文件
创建类,并且与对应xml文件关联

image.png image.png image.png

创建navigation

创建对应的资源

image.png image.png

点击则将创建的fragment添加进navigation中

image.png

将nav_host添加到容器中,容器放在activity_main.xml中


image.png image.png

添加BottomNavigationView

添加图片资源

创建底部菜单资源

image.png image.png

如下,以有效果


image.png

下面将菜单设置到底部
添加控件


image.png

设置menu资源

image.png

NavController切换配置

通过NavController实现点击菜单能够实现切换页面

代码中有关于ViewBinding的使用,暂不做详解

class MainActivity : AppCompatActivity() {
    lateinit var navController: NavController
    private var _binding: ActivityMainBinding? = null
    val binding get() = _binding!!

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

       _binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        //1、找到NavHostFragment
        val navHostFragment = supportFragmentManager.findFragmentById(R.id.containerFragment)
                as NavHostFragment

        //2、找到NavController
        navController = navHostFragment.navController

        //3、BottomNavigationView和NavController关联
        binding.bottomNavigationView.setupWithNavController(navController)


        //4、ActionBar与NavController关联
        val appBarConfiguration = AppBarConfiguration(
            setOf(R.id.recipesFragment,R.id.jokeFragment,R.id.favoritesFragment)
        )

        setupActionBarWithNavController(navController,appBarConfiguration)
    }

    override fun onDestroy() {
        _binding = null
        super.onDestroy()
    }
}

未完待续……

上一篇下一篇

猜你喜欢

热点阅读