Android 学习日记----jetpack---androidx.Navigation

Navigation概述:

导航是指支持用户导航、进入和退出应用中不同内容片段的交互。Android Jetpack 的导航组件可帮助您实现导航,无论是简单的按钮点击,还是应用栏和抽屉式导航栏等更为复杂的模式,该组件均可应对。导航组件还通过遵循一套既定原则来确保一致且可预测的用户体验。

导航组件由以下三个关键部分组成:

导航图:在一个集中位置包含所有导航相关信息的 XML 资源。这包括应用内所有单个内容区域(称为目标)以及用户可以通过应用获取的可能路径。

NavHost:显示导航图中目标的空白容器。导航组件包含一个默认 NavHost 实现 (NavHostFragment),可显示 Fragment 目标。

NavController:在 NavHost 中管理应用导航的对象。当用户在整个应用中移动时,NavController会安排 NavHost 中目标内容的交换。

在应用中导航时,您告诉 NavController,您想沿导航图中的特定路径导航至特定目标,或直接导航至特定目标。NavController 便会在 NavHost 中显示相应目标。

导航组件提供各种其他优势,包括以下内容:

处理 Fragment 事务。

默认情况下,正确处理往返操作。

为动画和转换提供标准化资源。

实现和处理深层链接。

包括导航界面模式(例如抽屉式导航栏和底部导航),用户只需完成极少的额外工作。

Safe Args - 可在目标之间导航和传递数据时提供类型安全的 Gradle 插件。

ViewModel 支持 - 您可以将 ViewModel 的范围限定为导航图,以在图表的目标之间共享与界面相关的数据。

以上是谷歌官网的概述,这里是引用而简述,下面我们开始实际的使用示例吧!

官方navigation使用入门传送门

从官方文档中我们可以看出,navigation使用比较重要的三点就是

1:NavHost

2:NavHostFragment

3:NavController

同样我们首先要做的就是要在gradle中引入依赖如下:

//navigation

def nav_version ="2.3.0-alpha01"

// Java language implementation

implementation"androidx.navigation:navigation-fragment:$nav_version"

implementation"androidx.navigation:navigation-ui:$nav_version"

1:首先我们要做的前期工作就是要创建一个activity和两个fragment留着接下来使用。


2:点击同步之后,首先我们鼠标右键点击res->new->android Resoure File如下:



然后选择


3:创建好了之后,点击视图上面有一个添加fragment的按钮,点击添加我们刚才创建好的fragment,添加了第一个之后我们能够看到上面有一个窗口加小红×的标志点击添加第二个fragment

如下:


4:添加完成之后我们再次鼠标右键点击res->new->android Resoure File创建menu文件如下:


5:创建好之后我们添加两个item其xml文件如下

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">

        android:id="@+id/iukFragment"

        android:icon="@android:drawable/ic_dialog_email"

        android:title="Iuk" />

        android:id="@+id/youFragment"

        android:icon="@drawable/ic_filter_vintage_black_24dp"

        android:title="you" />

</menu>

我们需要注意的是两个item的id要分别和之前的两个fragment 的id对应相同

6:以上都准备完全了之后我们回到activity对应的布局文件中分别添加BottomNavigationView组件和fragment

布局文件如下:

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout 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"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".navigation.NavigationActivity">

        android:id="@+id/fragment"

        android:name="androidx.navigation.fragment.NavHostFragment"

        android:layout_width="408dp"

        android:layout_height="688dp"

        app:defaultNavHost="true"

        app:layout_constraintBottom_toTopOf="@+id/bottomNavigationView"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintHorizontal_bias="0.0"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toTopOf="parent"

        app:layout_constraintVertical_bias="1.0"

        app:navGraph="@navigation/nav_graph" />

        android:id="@+id/bottomNavigationView"

        android:layout_width="match_parent"

        android:layout_height="45dp"

        android:background="#6e6e6e"

        app:layout_constraintBottom_toBottomOf="parent"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintHorizontal_bias="1.0"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toTopOf="parent"

        app:layout_constraintVertical_bias="0.995"

        app:menu="@menu/nav_menu">

</androidx.constraintlayout.widget.ConstraintLayout>

需要注意的是fragment中的app:defaultNavHost="true"表示这个fragment是作为主容器,app:navGraph="@navigation/nav_graph" 设置导航文件。

BottomNavigationView中app:menu="@menu/nav_menu"设置按钮文件

7:现在我们要在activity中进行NavController操作了代码如下:

public class NavigationActivity extends AppCompatActivity {

@Override

    protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_navigation);

        BottomNavigationView bottomNavigationView = findViewById(R.id.bottomNavigationView);

        NavController navController =Navigation.findNavController(this, R.id.fragment);

        AppBarConfiguration appBarConfiguration =new AppBarConfiguration.Builder(bottomNavigationView.getMenu()).build();

//进行界面绑定

NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);

        NavigationUI.setupWithNavController(bottomNavigationView, navController);

    }

}

当这一切都准备完成了之后一个简单的navigation示例就完成了,接下来运行看看吧!

点击左边按钮效果如下,


点击右边按钮下过如下:


好了,到达了我们想要的效果了,是不是很简单,快快用到你的项目中去吧!

想要demo的同学可以到这里来,github传送门这里有前面两篇文章将的demo都在里面,想要的同学都可以下载。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348