您当前的位置:首页 > 电脑百科 > 程序开发 > 移动端 > Android

Android Jetpack架构组件Navigation管理Fragment框架

时间:2020-08-18 16:17:45  来源:  作者:

Android官方推荐架构组件Navigation 让单 Activity 应用成为首选架构,更好的管理Fragment框架

Navigation目前仅AndroidStudio 3.2以上版本支持,如果您的版本不足3.2, 下载AndroidStudio3.2以上版本。官网下载地址:https://developer.android.google.cn/studio/

快速开发, 组件可单独使用,也可以同时工作。 消除样板 ,让代码Android 架构Jetpack管理乏味的活动事件,比如后台任务、导航和生命周期管理。这样你可以专注于让你的App更棒的东西,构建高质量、健壮的app 基于现代设计实践,Android Jetpack组件可以减少崩溃和内存泄漏,且向后兼容。接下来讲述Navigation的使用以及如何管理多个Fragment等

项目builde.gradle文件需配置:

implementation "androidx.navigation:navigation-fragment-ktx:2.3.0-alpha05"

implementation "androidx.navigation:navigation-ui-ktx:2.3.0-alpha05"

1.创建MainActivity和布局文件activity_navigation布局里配置:

Android Jetpack架构组件Navigation管理Fragment框架

 

activity_navigation.xml布局配置:

  <fragment
    android:id="@+id/my_nav_host_fragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    app:defaultNavHost="true"
    app:navGraph="@navigation/mobile_navigation" />

 <com.google.android.material.bottomnavigation.BottomNavigationView
             android:id="@+id/bottom_nav_view"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             app:labelVisibilityMode="labeled"
            app:menu="@menu/bottom_nav_menu" />

MainActivity里配置:

  val host: NavHostFragment = supportFragmentManager
        .findFragmentById(R.id.my_nav_host_fragment) as NavHostFragment? ?: return

  val navController = host.navController

  val bottomNav = findViewById<BottomNavigationView>(R.id.bottom_nav_view)

  bottomNav?.setupWithNavController(navController)

2、新建HomeFragment、FlowStepFragment、FlowStepFragment、SettingsFragment、DeepLinkFragment在Fragment片段里跳片段方法

方法1: view.findViewById(R.id.navigate_destination_button).setOnClickListener( Navigation.createNavigateOnClickListener(R.id.next_action) )

方法2: view.findViewById(R.id.navigate_destination_button)?.setOnClickListener { findNavController().navigate(R.id.flow_step_one_dest, null, null) }

3、在res里新建文件夹navigation 类型选择Navigation,然后在这个文件夹里创建mobile_navigation.xml

在mobile_navigation.xml里写入要跳转的各个片段Fragment及要传递的参数: startDestination默认第一个跳的片段id destination跳到另外一个片段id action 隐式跳转 ,argType传递参数类型,defaultValue传递参数值

Android Jetpack架构组件Navigation管理Fragment框架

 


Android Jetpack架构组件Navigation管理Fragment框架

 

<?xml version="1.0" encoding="utf-8"?><navigation xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"app:startDestination="@+id/home_dest">

<fragment
    android:id="@+id/home_dest"
    android:name="com.my.navigation.HomeFragment"
    android:label="@string/home"
    tools:layout="@layout/home_fragment">

    <!--todo destination隐式跳转到Fragement id=flow_step_one_dest -->
    <action
        android:id="@+id/next_action"
        app:destination="@+id/flow_step_one_dest"
        app:enterAnim="@anim/slide_in_right"
        app:exitAnim="@anim/slide_out_left"
        app:popEnterAnim="@anim/slide_in_left"
        app:popExitAnim="@anim/slide_out_right" />

</fragment>

<fragment
    android:id="@+id/flow_step_one_dest"
    android:name="com.my.navigation.FlowStepFragment"
    tools:layout="@layout/flow_step_one_fragment">
    <argument
        android:name="flowStepNumber"
        app:argType="integer"
        android:defaultValue="1"/>

    <action
        android:id="@+id/next_action"
        app:destination="@+id/flow_step_two_dest">
    </action>
</fragment>

<fragment
    android:id="@+id/flow_step_two_dest"
    android:name="com.my.navigation.FlowStepFragment"
    tools:layout="@layout/flow_step_two_fragment">

    <argument
        android:name="flowStepNumber"
        app:argType="integer"
        android:defaultValue="2"/>

    <action
        android:id="@+id/next_action"
        app:destination="@+id/settings_dest">
    </action>
</fragment>

<fragment
    android:id="@+id/settings_dest"
    android:name="com.my.navigation.SettingsFragment"
    android:label="@string/settings"
    tools:layout="@layout/settings_fragment" >
    <action
        android:id="@+id/next_action"
        app:destination="@+id/deeplink_dest">
    </action>
</fragment>

<fragment
    android:id="@+id/deeplink_dest"
    android:name="com.my.navigation.DeepLinkFragment"
    android:label="@string/deeplink"
    tools:layout="@layout/deeplink_fragment">

    <argument
        android:name="myarg"
        android:defaultValue="Android!"/>

</fragment>

</navigation>

项目地址:https://github.com/Visen123/MyNavigation



Tags:Android Jetpack架构   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
Android官方推荐架构组件Navigation 让单 Activity 应用成为首选架构,更好的管理Fragment框架Navigation目前仅AndroidStudio 3.2以上版本支持,如果您的版本不足3.2, 下载Andro...【详细内容】
2020-08-18  Tags: Android Jetpack架构  点击:(67)  评论:(0)  加入收藏
▌简易百科推荐
今天面试遇到同学说做过内存优化,于是我一般都会问那 Bitmap 的像素内存存在哪?大多数同学都回答在 java heap 里面,就比较尴尬,理论上你做内存优化,如果连图片这个内存大户内存...【详细内容】
2021-12-23  像程序那样思考    Tags:Android开发   点击:(6)  评论:(0)  加入收藏
Android logcat日志封装logcat痛点在Android开发中使用logcat非常频繁,logcat能帮我们定位问题,但是在日常使用中发现每次使用都需要传递tag,并且会遇到输出频率很高的log,在多...【详细内容】
2021-12-22  YuCoding    Tags:Android   点击:(7)  评论:(0)  加入收藏
对项目的基本介绍 1.整个框架主要是给MVVM框架使用的,自己写完interface接口后,通过自定义的注解就能自动生成接口方法 2.用Kotlin的Flow去代替Rxjava,因为我发现RxJava功能很...【详细内容】
2021-12-08  网易Leo    Tags:Android开发   点击:(16)  评论:(0)  加入收藏
前言在Android开发过程中,有些时候会根据需要引用别的项目到当前项目里面,而且以Module形式引用。所以本篇博文就来分享一下怎么以Module形式引用别的项目到当前项目中,方便开...【详细内容】
2021-12-07  网易Leo    Tags:Android开发   点击:(21)  评论:(0)  加入收藏
作者:fundroid这篇文章偏阅读一些,大家可以了解下 Android 的一些最新动向。每年9/10月份 Google 都会举行约为期2天的 Android Dev Summit,在活动上 Google 的技术专家们会分...【详细内容】
2021-11-30  像程序那样思考    Tags:Android开发   点击:(15)  评论:(0)  加入收藏
一、 准备工作1、安装JDK,下载地址(可能需要一个oracle账号,大家百度一下或者自行注册一个就行。尽可能选择8或者11,这两个是长期版本)Java SE | Oracle Technology Network | Or...【详细内容】
2021-11-23  永沧    Tags:Android   点击:(26)  评论:(0)  加入收藏
使用Maven Publish Plugin插件。(官方支持)一、在Library的build.gradle中配置plugins { id &#39;com.android.library&#39; id &#39;kotlin-android&#39; id &#39;k...【详细内容】
2021-11-05  羊城小阳    Tags:Android   点击:(36)  评论:(0)  加入收藏
谷歌离推出Play Store应用程序的新数据隐私部分又近了一步。应用程序开发人员现在可以通过谷歌在Play控制台的新 "数据安全表 "填写相关细节。该公司表示,所需信息将从2022年...【详细内容】
2021-10-20    中关村在线  Tags:安卓   点击:(57)  评论:(0)  加入收藏
架构究竟是什么?如何更好的理解架构?我们知道一个APP通常是由class组成,而这些class之间如何组合,相互之间又如何产生作用,就是影响这个APP的关键点。细分的话我们可以将其分为类...【详细内容】
2021-09-17  像程序那样思考    Tags:Android架构   点击:(51)  评论:(0)  加入收藏
概述当Android应用程序需要访问设备上的敏感资源时,应用程序开发人员会使用权限模型。虽然该模型使用起来非常简单,但开发人员在使用权限时容易出错,从而导致安全漏洞。本文中,...【详细内容】
2021-09-07  SecTr安全团队    Tags:Android开发   点击:(66)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条