Android日志—Navigation
Posted 程序员-吴彦祖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android日志—Navigation相关的知识,希望对你有一定的参考价值。
Navigation简介
Navigation是一个框架,用于android应用中的“目标”之间的导航,该框架提供一致的API,无论目标是作为Fragment、Activity还是其他组件的实现。
- NavGraph 在一个集中位置包含所有导航相关信息的XML资源
- NavHost 显示导航图中目标的空白容器,导航组件包含一个默认NavHost实现(NavHostFragment),可显示Fragment目标
- NavController 在NavHost中管理应用导航的对象。当用户在整个应用中移动时,NavController会安排NavHost中目标内容的交换。
声明依赖项
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"
这里我使用的是kotlin语言,所以导入 apply plugin: “androidx.navigation.safeargs.kotlin”
实际应用
这里通过一个简单的美食项目来对navigation做更深层次的理解
创建fragment(两种)
第一种
使用系统提供的。根据需要选择,这里我使用Blank,之后删除多余的代码行。
image.png
第二种
自己创建
创建相应的xml文件
创建类,并且与对应xml文件关联
创建navigation
创建对应的资源
点击则将创建的fragment添加进navigation中
将nav_host添加到容器中,容器放在activity_main.xml中
添加BottomNavigationView
添加图片资源
创建底部菜单资源
如下,以有效果
下面将菜单设置到底部
添加控件
设置menu资源
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()
以上是关于Android日志—Navigation的主要内容,如果未能解决你的问题,请参考以下文章
踩坑!Android Jetpack组件间库之Navigation
Android Navigation Url Deep Link Back to Previous App
Android 解决XXX Layout leaked 使用Navigation 踩坑 XML内存泄漏
IllegalArgumentException:无法从当前目的地 Destination [Navigation Error] 找到导航操作/目的地