应用内导航,也就是我们通常所说屏幕切换,一直是 Android 开发很关键的一部分。...我们已正式发布稳定版 Android Jetpack 导航组件,它包含丰富的库、工具和指南,为开发者们提供了一个强劲、完整的导航框架,让开发者可以轻松应对复杂的导航场景。...我们在这个视频中通过一些导航组件的应用实例,向您演示如何通过 "单个 activity 嵌套多个 fragment" 的方法来完成导航工作。...v.qq.com/x/page/v0879xupgo0.html Bilibili 视频链接: https://www.bilibili.com/video/av54529064/ 如果您想获取更详细的技术指导...,可以查看 Android 开发者网站上有关导航组件的 codelabs 课程和开发文档。
是 Google 官方提供的 用于管理 Navigation 导航的组件 , 属于 Android 系统的 Jetpack 工具包 ; 借助 NavigationUI 可以很方便的 创建和组织应用程序的导航界面...; 如 : 构建复杂的导航结构,垂直或水平的主菜单 , 侧边栏 , 抽屉导航栏等 ; 开发者 可以 通过 NavigationUI 轻松地管理页面的转换和导航 ; NavigationUI 提供了一些静态方法来处理...使用 Navigation 组件 切换 Fragment 界面时 , 除了进行界面切换之外 , 不同的界面对应的顶部 标题栏 AppBar 需要进行相应的改变 ; Navigation 组件中 , 提供了...(Blank) " 选项 , 在弹出的界面中 , 输入 Fragment 名称 , 创建新的 Fragment ; 创建 Fragment 时 , 会自动生成对应的 布局文件 : 注意 : 该操作比较坑..., 生成 Fragment 时 , 会自动添加 Kotlin 语言插件的 Gradle 依赖 , 必要时可以删除该依赖 ; 自动生成的依赖没有配置 Maven 源 , 会报错 ; buildscript
ViewModel 的源码分析 本次创建项目是升级 Android Studio 为 3.2.1,所以直接将项目中的依赖包替换成 androidx 下面的对应包,主要配置如下: // gradle 插件...> <TextView android:layout_width="match_parent" android:layout_height...> <variable..." android:layout_height="wrap_content" android:textSize="18sp" android
android:text="@{user.name}" /> 当在布局文件中绑定某个数据时,比如上面的 TextView 的 text 属性,在绑定时会自动接收兼容类型的参数所对应的方法,如 setText...BindingMethods 这是 databinding 库提供的一个注解,用于当 View 中的某个属性与其对应的 setter 方法名称不对应时进行映射,如 TextView 的属性 android...BindingAdapter,可能会疑惑为什么能够识别呢,在编译期间 data-binding 编译器会查找带有 @BindingAdapter 注解的方法,最终会将自定义的 setter 方法生成到与之对应的...binding 类中,生成的部分代码如下: @Override protected void executeBindings() { long dirtyFlags = 0; synchronized...@color/colorRed : @drawable/drawableBlue}"/> 不管是 BindingAdapter 还是 BindingConversion 最终都会将相关代码生成到与之对应的
Android Jetpack组件 Compose 使用 前言 正文 一、创建Compose项目 1. setContent 2....,我们需要图形界面和xml去创建布局,通过预览达到我们想要的效果,而Jetpack推出的新组件Compose就解决了这个痛点,下面让我们来了解它,使用它。...使用它,来感受声明式UI的强大之处。 正文 Jetpack Compose是一个用于构建原生Android UI的现代工具包。...Jetpack Compose 通过更少的代码、强大的工具和直观的 Kotlin API 简化并加速了 Android 上的 UI 开发。 听起来好像老牛逼了!!!...再看这里依赖,主要是有compose的ui,我们之前看到的Text就在这个库里面,以及支持compose的material组件,还有就是compose的预览。
文件中进行配置,具体如下: // 设置支持 dataBinding dataBinding { enabled = true } 布局文件配置 Data Binding Library 会自动生成将布局中的视图和数据对象绑定所需要的类...方法不存在会调用 public String name() { return "name"; } //... } 绑定数据 dataBinding 会为内个布局文件生成对应的绑定类...super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //生成绑定类...FragmentOneBinding.bind(view); User user = new User("小明"); oneBinding.setUser(user); return view; } 其他布局的绑定方式基本是都是使用某个生成的绑定类的...user.lastName}" - 空指针异常处理 生成的绑定类会自动检查 null 值以避免 NullPointerException,在表达式 @ {user.name} 中,如果 user 为
目前,Android Jetpack 内置了对 Slice 的支持,并且可以向后一直扩展到 Android 4.4,覆盖约 95% 的 Android 用户。...,然后点击左上角的绿色加号并选中【Android App】选型,如下图所示。...[在这里插入图片描述] 2.3 构建Slice 首先,在新建的Android项目的在build.gradle添加如下依赖。... 需要说明的是,默认情况下,SliceProvider 模板指向的是 AndroidX 库,如果您的Android项目使用旧版支持库,请修改 build.gradle...重新运行Android项目,效果如下图所示。 [在这里插入图片描述] 当然,Slice 还支持在发送到应用的 intent 中包含状态的其他输入类型,如切换开关,代码如下。
一、WorkManager概述 1.1 WorkManager简介 在Android应用开发中,或多或少的会有后台任务的需求,根据需求场景的不同,Android为后台任务提供了多种不同的解决方案,如Service...WorkManager是一套AP,用来替换先前的 Android 后台调度 API(包括 FirebaseJobDispatcher、GcmNetworkManager 和 JobScheduler)等组件...与系统生成的ID不同,唯一名称是由开发者指定,而不是由 WorkManager 自动生成。唯一任务既可用于一次性任务,也可用于定期任务。...Jetpack架构组件(六)之Room Android Jetpack架构组件(五)之Navigation Android Jetpack架构组件(四)之LiveData Android Jetpack...架构组件(三)之ViewModel Android Jetpack架构组件(二)之Lifecycle Android Jetpack架构组件(一)与AndroidX
一、ViewModel简介 在早期的Android开发中,由于应用相对较小,页面相对简单,我们会将数据请求、页面UI处理和数据加载全部放在Activity或Fragment中进行,但是随着项目的迭代,...此时,借鉴后端的后端程序的开发思路,我们对Android项目进行了分层,典型的有MVC,MVP和MVVM等项目分层,然后每层负责自己的事情即可。以现在流行的MVVM模式为例。...Model层:数据层,主要负责数据实体和对数据实体的操作。 View层:视图层,对应Android的Activity、Fragment和View等,负责数据的显示以及与用户的交互。...在JetPack架构中,ViewModel组件是一个可以感知生命周期的形式来存储和管理视图相关的数据的组件,因此它适合以下场景。 适合需要保存大量数据的场景。...二、生命周期 我们知道,Android的Activity/Fragment是有生命周期的,我们可以在不同的生命周期函数中执行不同的操作来达到不同的目的。
因此,Jetpack提供了一个名为Navigation的组件,旨在方便开发者管理Fragment页面和Appbar。...相比之前Fragment的管理需要借助FragmentManager和FragmentTransaction,使用Navigation组件有如下一些优点: 可视化的页面导航图,方便我们理清页面之间的关系...在【Project】窗口中,res 目录下右键然后依次选择 【New】->【Android Resource File】创建 New Resource File 对话框,如下图所示。...[在这里插入图片描述] 参考: Android Jetpack架构组件(四)之LiveData Android Jetpack架构组件(三)之ViewModel Android Jetpack架构组件(...二)之Lifecycle Android Jetpack架构组件(一)与AndroidX
()方法对Activity进行绑定,其返回值就是工具生成的Binding类。...DataBinding的属性都生成了对应的方法,而且每个方法都使用了@BindingAdapter注解,注解中的参数就是对应View的属性。..." app:users="@{users}"/> 参考: Android Jetpack架构组件(七)之WorkManager Android Jetpack架构组件...(六)之Room Android Jetpack架构组件(五)之Navigation Android Jetpack架构组件(四)之LiveData Android Jetpack架构组件(三)之ViewModel...Android Jetpack架构组件(二)之Lifecycle Android Jetpack架构组件(一)与AndroidX
为了方便开发者进行分页处理,Google为开发者提供了分页组件(Paging),借助Paging组件开发者可以轻松的加载和呈现大型数据集,同时在 RecyclerView 中进行快速、无限滚动。...将PageList的数据交给PageListAdapter。 PageListAdapter在后台线程对比原来的PageList和新的PageList,生成新的PageList。...在在 ViewModel 中创建 PagedList.Config 并进行分页参数配置,创建 DataSource 工厂对象,最终生成支持分页的 LiveData 数据。...三、Paging3 3.1 概述 Paging是JetPack框架提供的一个分页库,它可以帮助开发者从本地存储或通过网络加载显示数据,不过由于历史原因,早期的Paging存在各种使用上的问题,因此Android...3.1.3 Paging3应用架构 下面是Android官方推荐的接入 Paging3的应用架构图。
一、 LiveData简介 LiveData是Jetpack架构组件Lifecycle 库的一部分,是一个可感知生命周期的可观察容器类 (Observable)。...使用 LiveData 保存数据时,由于数据和组件是分离的,所以当组件被销毁时可以保证数据不会丢失。...二、 LiveData与ViewModel的关系 在Jetpack架构中,ViewModel的主要作用是存储各种数据,当然,我们也可以在ViewModel中处理一些数据逻辑。...而LiveData的作用就是包装ViewModel中数据,并让被观察者能够观察数据的变化。下图是官方Jetpack架构的示意图。...,并且它是具有组件生命周期感知能力的,那它是如何观察组件生命周期变化的呢?
事实上,Android Jetpack所包含的内容是比较庞大的,主要由基础组件、架构组件、行为组件和UI组件构成,如下图所示。...并在Android Architecture Component的基础上发布了Android Jetpack等架构组件。...2.消除样板代码 Android Jetpack可以很方便的管理繁琐的Activity(如后台任务、导航和生命周期管理)。...3.构建高质量的强大应用 Android Jetpack组件围绕现代化设计实践构建而成,具有向后兼容性,可以有效减少崩溃和内存泄漏。...不仅如此,AAC(Android Architecture Components架构缩写)中的组件也被 合并到AndroidX中,所以在使用JetPack组件时经常会看到AndroidX相关的包。
今天为大家发布本系列文章中的第二篇: 导航到对话框目的地,如果您想了解第一篇发布的内容,请点击这里查看本系列的第一篇: 导航组件概览。...导航组件默认的行为确实是替换掉 NavHostFragment 中的 fragment。但是导航组件同样可以处理在 NavHostFragment 之外的对话框目的地。...id 将导航目的地改变为对话框,这里的 id 正是在导航图中创建目的地时所生成的。...注意: 点击返回按钮,同样会返回甜甜圈列表,因为导航组件已经自动为我们设置好了返回栈。 总结 通过这篇文章我们了解了如何使用内置的导航组件快速地创建一个新应用,并且学习了如何导航到对话框目的地。...更多信息 更多关于导航组件的详情,请查看 导航组件使用入门文档 DonutTracker 应用的完整代码,请查看 Github 示例 更多 MAD Skills 系列内容,请查看 Android Developers
Room 包含 3 个主要组件: 数据库:包含数据库持有者,并作为应用已保留的持久关系型数据的底层连接的主要接入点。...然后,应用使用每个 DAO 从数据库中获取实体,然后再将对这些实体的所有更改保存回数据库中。最后,应用使用实体来获取和设置与数据库中的表列相对应的值。 Room 不同组件之间的关系图 ?...首先把Room的组件在build.gradle中引入进来 def room_version = "2.2.5" implementation "androidx.room:room-runtime...01 简单使用 按上面Room的介绍,我们要创建三个主要组件@Database,@Entity和@Dao 类Entity创建 package com.vaccae.roomdemo.bean import...,上面@Entity中tableName就是我们在Sqlite数据库中要生成的表名,@PrimaryKey就是设置的code为主键,@ColumnInfo是用于标识表里的列名,如果这个不写的话就默认是你的属性名
在Android开发中,解藕很大程度上表现为系统组件的生命周期与普通组件之间的解藕,因为普通组件在使用过程中需要依赖系统组件的的生命周期。...我们希望在对组件进行管理不依赖页面的生命周期的回调方法,同时当页面生命周期发生改变时,也能够即时的收到通知。这在Android组件化和架构设计的时候表现的尤为明显。...那纠结什么是Lifecycle组件呢?总的来说,Lifecycle 就是具有生命周期感知能力的组件。...,Android的Lifecycle组件需要先创建一个观察者,当组件生命周期发生变化时,通知观察者LifeCycle注解的方法做出响应。...参考:Android Jetpack架构组件(一)与AndroidX
Bar 管理过程中使用比较繁琐 , 维护难度较大 ; Jetpack 提供的 Navigation 组件 , 解决上述 Fragment 页面管理 与 App Bar 管理 问题 ; Navigation...中定义的 Fragment 页面 需要通过 NavHostFragment 进行展示 ; NavController 组件 : 该组件是 NavHostFragment 中的管理对象 , 用于管理应用中的导航操作...Graph , 并指定要跳转的 destination 页面 创建 NavHostFragment 组件 执行 Fragment 页面跳转 , 并添加动画效果 使用 NavController 组件实现页面导航.../ Android Resource File " 选项 , 在弹出的对话框中 , 选择 Resource Type 为 Navigation , 其 Directory name 会被自动设置为...然后设置该 NavHostFragment 组件 的约束布局选项 , 充满全屏 ; 生成的完整 Activity 布局文件代码如下 : <?
在 Android arch componet 完整的架构中,更推荐使用构建一个 PageList 的 LiveData 的方式。...初始加载我们看完了,那么,剩下的数据是如何加载的呢 我们反过来看 RecyclerView, 如果我们滑动列表或者其他操作的时候,很自然会调用 adapter 的 bind 方法。...,之后的逻辑和之前的 dispathLoadInitial 就非常的类似了。...理解 最后谈一下对 paging 的理解。 一般情况下,我们最原始的方式,列表 UI 所在的部分,是需要知道数据的来源等逻辑部分,我们在常见的 mvp 模式中,会对数据和 UI 进行分层。...而 paging 就利用一系列的封装, 提供了更加通用的 API 调用来做这些事情。更通俗点说,就是实现了分页加载结构中的 Presenter 层及 Presenter层的下游处理部分。
Jetpack组件 DataStore的使用和简单封装 前言 正文 一、添加依赖 二、数据存取 三、数据查看和清除 四、封装 五、对象存取 1....正文 DataStore是Jetpack中的一个组件,用于做数据持久化,DataStore以异步、一致的事务方式存储数据,克服了SharedPreferences的一些缺点,DataStore基于Kotlin...三、数据查看和清除 在进行定义dataStore时,会在手机中生成一个pb文件,这里我们用虚拟机来看, 然后通过你的程序包名去找 这里的文件就是存放你的缓存信息的文件。...Protobufs 生成 java Protobuf-lite 代码。...*/ option java_package = "com.llw.datastore";//设置生成的类所在的包 option java_multiple_files = true;//可能会有多个文件
领取专属 10元无门槛券
手把手带您无忧上云