[Android官方]Jetpack导航组件:实战与分析
2023年7月13日发(作者:)
[Android官⽅]Jetpack导航组件:实战与分析前⾔导航(Navigation )指的是⽤户在应⽤中的前进和后退操作。导航很⼤程度上和业务逻辑相关。但是,在传统的Android应⽤开发中,导航需要开发者⾃⼰处理,对应的backstack也需要开发者⾃⾏维护,与业务相关的导航逻辑也要硬编码在Java代码中。⽽同时期的iOS应⽤开发框架早就提出了导航图的概念,并对导航进⾏了框架级别的抽象和⽀持。为了解决类似问题,简化Android应⽤开发,Google在2018年推出了Jetpack。Jetpack是⼀套库、⼯具和指南,可帮助开发者更轻松地编写优质应⽤。在Jetpack中,Android第⼀次以Navigation组件的形式对⽤户的导航⾏为进⾏了抽象和封装,不仅简化了开发流程,还通过遵循⼀套来确保⼀致且可预测的⽤户体验,从⽽实现了代码可维护性和⽤户体验⼀致性的完美结合。概览Jetpack导航组件由以下三个关键部分组成:导航图(Navigation graph):在⼀个XML⽂件中集中定义所有导航相关信息的,它包括应⽤内的所有导航⽬标以及所有可能的导航路径。导航容器(NavHost):显⽰导航⽬标的容器。Jetpack提供了⼀个默认的导航容器实现NavHostFragment。导航控制器(NavController):在导航容器中管理导航对象。当⽤户在应⽤中前进或者后退时,导航控制器决定下⼀个将要显⽰的内容。功能JetpackNavigation组件提供以下⼏个功能:封装Fragment事务:Navigation组件封装了Fragment事务,从⽽简化了开发者的⼯作。为过场动画提供标准化⽀持:开发者只需要专注于定义过场动画本⾝。传递参数:通过Safe Args插件,开发者可在导航⽬标之间传递类型安全的数据。实战我们的实战是基于Google的。它的最终效果是这样:这是3个简单的Fragment之间跳转的情景,经过过场动画的修饰,它们之前的切换⾮常流畅⾃然。接下来,我们就通过代码来详细讲解Fragment导航是如何实现的。⾸先,在中添加以下依赖:dependencies { ... //Navigation implementation "tion:navigation-fragment-ktx:$tionVersion" implementation "tion:navigation-ui-ktx:$tionVersion"}新建两个Fragment。其中,第⼆个Fragment会根据传⼊的参数决定要加载的UI:class HomeFragment : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { return e(_fragment, container, false) }}class FlowStepFragment : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { return when (flowStepNumber) { 2 -> e(_step_two_fragment, container, false) else -> e(_step_one_fragment, container, false) } }}新建导航视图⽂件(mobile_)打开导航视图⽂件,进⾏可视化编辑,包括新增Fragment,或者连接Fragment:我们打开导航视图⽂件的Text标签,进⼊XML的编辑页⾯,并进⾏如下配置: 在导航视图⽂件中,我们定义了三个Fragment。每⼀个Fragment标签下都定义了⼀个Action,⽤来指定下⼀个要显⽰的Fragment,我们还可以为Action指定过场动画。此外,我们需要在Activity的布局⽂件加⼊导航容器NavHostFragment: ... ...然后,我们需要在Activity中添加如下代码:class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { te(savedInstanceState) setContentView(tion_activity) }
override fun onSupportNavigateUp(): Boolean { return findNavController(_nav_host_fragment).navigateUp() }}这⾥,我们重载了AppCompatActivity的onSupportNavigateUp⽅法。当⽤户点击导航栏内的向上按钮时,onSupportNavigateUp就会被调⽤,⽤来结束当前Activity,并显⽰⽗Activity。最后,我们需要配置不同Fragment对应的跳转事件:class HomeFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { Created(view, savedInstanceState)
val options = navOptions { anim { enter = _in_right exit = _out_left popEnter = _in_left popExit = _out_right } }
ewById
ewById
发布者:admin,转转请注明出处:http://www.yc00.com/news/1689214608a222071.html
评论列表(0条)