在res文件夹下新建navigation目录 , 并新建my_nav.xml 文件 。配置好每个Fragment , 其中:
- app:startDestination 属性代表一开始显示的fragment
- android:name 属性代表对应的Fragment路径
- action 代表该Fragment存在的跳转事件 , 比如myFragment1可以跳转myFragment2 。
- 修改Activity的布局文件:
<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:id="@+id/container"android:layout_width="match_parent"android:layout_height="match_parent"><fragmentandroid:id="@+id/nav_host_fragment"android:name="androidx.navigation.fragment.NavHostFragment"android:layout_width="0dp"android:layout_height="0dp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent"app:defaultNavHost="true"app:navGraph="@navigation/my_nav" /></androidx.constraintlayout.widget.ConstraintLayout>可以看到 , Activity的布局文件就是一个fragment控件 , name为NavHostFragment , navGraph为刚才新建的mynavigation文件 。5)配置完了之后 , 就可以设置具体的跳转逻辑了 。
override fun onClick(v: View) {//不带参数 v.findNavController().navigate(R.id.action_blankFragment_to_blankFragment2)//带参数var bundle = bundleOf("amount" to amount)v.findNavController().navigate(R.id.confirmationAction, bundle)}//接收数据tv.text = arguments?.getString("amount")需要注意的是 , 跳转这块官方建议用Safe Args 的Gradle 插件 , 该插件可以生成简单的 object 和 builder类 , 以便以类型安全的方式浏览和访问任何关联的参数 。这里就不细说了 , 感兴趣的可以去官网看看Room
Room 持久性库在 SQLite 的基础上提供了一个抽象层 , 让用户能够在充分利用 SQLite 的强大功能的同时 , 获享更强健的数据库访问机制 。所以Room就是一个数据库框架 。问题来了 , 市面上那么多数据库组件 , 比如ormLite , greendao等等 , 为什么google还要出一个room , 有什么优势呢?
- 性能优势 , 一次数据库操作主要包括:构造sql语句—编译语句—传入参数—执行操作 。ORMLite主要在获取参数属性值的时候 , 是通过反射获取的 , 所以速度较慢 。GreenDao在构造sql语句的时候是通过代码拼接 , 所以较慢 。Room是通过接口方法的注解生成sql语句 , 也就是编译成字节码的时候就生成了sql语句 , 所以运行起来较快 。
- 支持jetpack其他组件(比如LiveData , Paging)以及RxJAVA , 这就好比借助了当前所在的优势环境 , 就能给你带来一些得天独厚的优势 。当然实际使用起来也确实要方便很多 , 比如liveData结合 , 就能在数据查询后进行自动UI更新 。
1)首先导入库:
apply plugin: 'kotlin-kapt'dependencies {def room_version = "2.2.5"implementation "androidx.room:room-runtime:$room_version"kapt "androidx.room:room-compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor// optional - Kotlin Extensions and Coroutines support for Roomimplementation "androidx.room:room-ktx:$room_version"// optional - RxJava support for Roomimplementation "androidx.room:room-rxjava2:$room_version"}2)建立数据库类 , 声明数据库表成员 , 数据库名称 , 数据库版本 , 单例等等@Database(entities = arrayOf(User::class), version = 1)abstract class UserDb : RoomDatabase() {abstract fun userDao(): UserDaocompanion object {private var instance: UserDb? = null@Synchronizedfun get(context: Context): UserDb {if (instance == null) {instance = Room.databaseBuilder(context.applicationContext,UserDb::class.java, "StudentDatabase").build()}return instance!!}}}3)建表 , 可以设置主键 , 外键 , 索引 , 自增等等推荐阅读
- iOS性能优化之图片最佳实践
- TCP 重置攻击的工作原理
- 想知道是什么占用你的电脑空间,正确使用Windows 10查看磁盘空间
- 鲤鱼是动物类吗 鲤鱼是鱼类动物吗
- 外星飞碟是否真的存在 UFO外星飞碟
- 泰坦尼克号沉没的真正原因 泰坦尼克号沉没是阴谋吗
- semi-structured data 什么是半结构化数据?
- 看苗鼓表演品黄金茶,怎样判断保靖黄金茶是否过期
- 什么是算法的大O表示法
- Windows 10搭建FTP服务器
