大象笔记

知者行之始,行者知之成

Android 11: IntentService is deprecated

使用 IntentService 实现了一个耗时的功能,但是 Android Studio 编译时警告: IntentService is deprecated 官方文档 https://developer.android.google.cn/reference/android/app/IntentService This class was deprecated in API level 30. IntentService is subject to all the background execution limits imposed with Android 8.0 (API le ...

阅读全文...

Android Activity 中点击 action bar 按钮,跳转 Settings Fragment

需求 想实现点击 app bar / action bar 上的一个按钮,跳转到设置功能页,即 Settings Fragment。 findNavController 实现跳转 由于 action bar 在 main activity layout 中,并不属于任何一个 fragment,所以需要在 activity 中实现。 参考 Fragment 中的 findNavController 用法: findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment) 在 Activity 中使用 findNa ...

阅读全文...

Android App Bar / Action Bar 添加按钮

想要在 Android App 中添加一个配置页面,用来进行基本设置调整。例如: 修改字体大小 修改字体颜色 修改背景图片 对比了一下使用 BottomNavigationView 底部 tabbar 的方案,感觉还是 app bar 比较直观一些。 app bar 也称为 action bar,在界面顶部。新建 Basic Activity 时,自带功能。 https://developer.android.google.cn/training/appbar 将默认的折叠项显示出来 修改 menu xml 文件 <item android:id="@+id/action_ ...

阅读全文...

Django LTS 版本的选择 (2021 年)

最近又要做 Django 版本的选择了,于是整理了一下。 Django 版本列表 参考官方网站的下载页 https://www.djangoproject.com/download/ Django LTS 版本的维护时间 LTS 版的维护时间在 3 年 非 LTS 版也就 1 年出头 2.2 LTS 还是 3.2 LTS 2019 年后到 2021 年初只有四个版本 2.1 2.2 LTS 3.0 3.1 目前看等 3.2 LTS 是值得的,2021 年 4 月发布。 可以先用 3.1 进行开发,然后迁移到 3.2 LTS。 Django 3.2 LTS 版本需要注意的改动 参考 ht ...

阅读全文...

Android Room Entity 为某个字段添加索引

担心 Android 本地 SQLite 数据库存储数据过多时,造成查询效率下降,所以想给字段加上索引。 添加索引示例 例如,我想给待办事项这个表(todos)的完成状态字段(done)添加索引。 设置 indices 即可: @Entity( tableName = "todos", indices = [Index(value = ["done", ])] ) data class Todo( var title: String, var content: String, ) { @PrimaryKey(aut ...

阅读全文...

RecyclerView 子项 View Holder 的点击事件响应

需求 点击 RecyclerView 中的一个 checkbox 子项,更新本地 sqlite 数据库中的一行数据的选中状态字段。 方案对比: 方案一 (不可行):使用 Data Binding 事件处理机制中的 listener binding。 参考 https://developer.android.com/topic/libraries/data-binding/expressions#listener_bindings 采用这个方案,就能把事件响应方法放在 Fragment 中,也就可以使用 Fragment 中的 View Model 了,进而进行 Room Update 操作。 ...

阅读全文...

Android Hilt 实现依赖注入的自动化管理

Android Sunflower Demo 中看到这样一段代码: import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @HiltViewModel class PlantListViewModel @Inject internal constructor( plantRepository: PlantRepository, private val savedStateHandle: SavedStateHandle ) : ViewModel() { // ... ...

阅读全文...

Android RecyclerView 展示数据列表

RecyclerView 的用途 recycle,回收,使再循环的意思。 用于展示列表数据,通常量很大。如名字所示,RecyclerView 可以循环使用已创建的 view,以提升性能。 RecyclerView 的添加步骤 layout XML 中添加 RecyclerView layout XML 中设置 LayoutManager。用于设置子项的排列布局方式,例如:LinearLayoutManager,GridLayoutManager,StaggeredGridLayoutManager。 Adapter 中实现 RecyclerView.ViewHolder。view holde ...

阅读全文...

2021春节假期第一天在医院度过

今天春节假期第一天,正好赶上媳妇产检的日子,而我也准备顺便去医院检查一下。 我的症状 近一个月右下腹部贴近肋骨处,晚上间歇性疼痛,白天要轻很多,甚至没有感觉。但是有点影响睡眠质量。一个月有个三两次,一次持续两天左右。 我自己百度了一下。。。知道那个位置是肝、胆、胰等器官。症状上看,有点像胰腺炎,但是又没有很多典型症状。总之,有点担心,还是去医院检查一下比较好。有一天疼的不行,正准备请假去医院,突然不疼了。。。所以想不如产检时顺便看看吧,省的担心,把自己吓坏。 医院检查 早上把媳妇送到毓璜顶一楼产检处,我就去二楼挂了个消化内科的号。医生问我有没有乙肝,我说没有。无法直接定位问题,就让我先去做个血 ...

阅读全文...

withContext(Dispatchers.IO) 与 viewModelScope.launch(Dispatchers.IO) 的区别

viewModelScope 的作用 viewModelScope.launch(Dispatchers.IO) { // do something } viewModelScope 是一个内置的 CoroutineScope,包含在 ViewModel KTX 扩展中 Dispatchers.IO 是为了注明当前 coroutine 需要运行在一个用来执行 I/O 操作的线程中 当用户从一个界面退出,其对应的 ViewModel 会被销毁,相应的此 ViewModel 的 viewModelScope 会被自动取消 (cancelled),所有运行在 viewModelScop ...

阅读全文...

Android Kotlin 协程 Dispatchers 有哪些值

Dispatchers 有哪些值 Dispatchers.Main:Android 主线程。用于调用 suspend 函数,UI 框架操作,及更新 LiveData 对象。 Dispatchers.IO:非主线程。用于磁盘操作(例如,Room 操作),及网络 I/O 请求(例如,调用服务器 API)。 Dispatchers.Default:非主线程,用于 CPU 密集型操作。例如,list 排序,及 JSON 解析。 这里需要注意的是,在 launch 不加参数时,其默认值是 Dispatchers.Main,而不是 Dispatchers.Default。 Dispatchers.IO ...

阅读全文...

Android Kotlin Room: AppDatabase_Impl does not exist

Android 4.1.2 测试 Android Room 的使用,在 coroutine 中调用 Room.databaseBuilder 时,报错 AppDatabase_Impl does not exist Google 了半天没有头绪,这个报错也太抽象了。最后在参考了 Room 官方文档之后, 才发现是 gradle 的配置问题。 解决方法 修改 app gradle.build 的配置,增加 plugin kotlin-kapt,如下: plugins { id 'com.android.application' id 'kotlin-android' ...

阅读全文...

近期节日

查看更多节日