分类下相关文章
2021-03-12 · 阅读 5995 · 字数 395
Bug 现象 陪媳妇在医院生二娃的时候,用自己新开发的一个 Todo 管理的 Android App 记录待办事宜。当待办事项列表条目很多,超过一屏,此时下拉滚动查看更多事项,会发现这些待办事项的完成状态发生错乱。并且引发我的壁纸生成机制被频繁触发,功能失效。。。 由于记录的事情太多也很重要,引起极度不适,气得我差点卸载,给自己 Google Play 上 1 星差评。 导致 checkbox 状态混乱的原因 为了节省内存,RecyclerView 滚动时,会将移出可视范围、不可见的条目做回收。 如果条目中 (View Holder)包含 CheckBox,在回收时,会自动将 CheckBox ...
2021-03-04 · 阅读 5260 · 字数 117
场景 一个 Main Activity,多个 Fragment 组成的 Android App。 界面1,列表页:list fragment 界面2,详情页:detail fragment 当列表页进入详情页时,想在 fragment 顶部的 toolbar 看到回退按钮。 kotlin 实现代码 由于这里的 toolbar 输入 Main Activity,所以在 Activity 里添加: private lateinit var appBarConfiguration: AppBarConfiguration override fun onCreate(savedInstanceS ...
2023-03-20 · 阅读 8504 · 字数 316
使用 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 ...
2021-02-27 · 阅读 3643 · 字数 59
在 Android App 的新建页面,我想将输入焦点自动设置到第一个输入框上,这样就省去用户点击的麻烦。 在使用了 Data Binding 的情况下,kotlin 的写法: binding.editTextTitle.requestFocus() ...
2021-02-26 · 阅读 3754 · 字数 202
需求 想实现点击 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 ...
2021-02-25 · 阅读 5214 · 字数 156
想要在 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_ ...
2021-02-18 · 阅读 4014 · 字数 221
例如,在 Android App 中,我想从本地 SQLite 数据库中,取所有未完成的任务,及已完成的任务的前50条。限制读取已完成条数是为了防止数据量过大,内存不可控。 Room 中的查询 SQL 在 DAO 代码中: @Query(""" SELECT * FROM ( SELECT * FROM (SELECT * FROM todos WHERE done = 0) UNION SELECT * FROM (SELECT * FROM todos WHERE done = 1 ORDER BY id DESC LIMIT 50) ) OR ...
2021-02-18 · 阅读 7390 · 字数 207
担心 Android 本地 SQLite 数据库存储数据过多时,造成查询效率下降,所以想给字段加上索引。 添加索引示例 例如,我想给待办事项这个表(todos)的完成状态字段(done)添加索引。 设置 indices 即可: @Entity( tableName = "todos", indices = [Index(value = ["done", ])] ) data class Todo( var title: String, var content: String, ) { @PrimaryKey(aut ...
2021-02-17 · 阅读 4607
在 Fragment 中使用 kotlin 实例化 WallpaperManager: val wallpaperManager = WallpaperManager.getInstance(this) 报错: Type mismatch. Required: Context! Found: XxxFragment 解决方法: val wallpaperManager = WallpaperManager.getInstance(activity) Android Context 是指什么呢? // TODO ...
2021-02-17 · 阅读 4007 · 字数 501
需求 点击 RecyclerView 中的一个 checkbox 子项,更新本地 sqlite 数据库中的一行数据的选中状态字段。 方案对比: 方案一 (不可行):使用 Data Binding 事件处理机制中的 listener binding。 参考 https://developer.android.com/topic/libraries/data-binding/expressions#listener_bindings 采用这个方案,就能把事件响应方法放在 Fragment 中,也就可以使用 Fragment 中的 View Model 了,进而进行 Room Update 操作。 ...
2023-05-24 · 阅读 7460 · 字数 1033
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() { // ... ...
2021-02-15 · 阅读 3748 · 字数 139
在实现一个 RecyclerView 的 Adapter 时,类的首行代码即报错: class TodoAdapter : ListAdapter<Todo, TodoAdapter.TodoViewHolder>(TodoDiffCallback()) { 报错提示为: No type arguments expected for interface ListAdapter 很奇怪,明明是完全 copy 的 sunflower 的示例代码,怎么还会报错。 仔细检查发现,Android Studio 自动 import 的类有问题: 默认导入的是: import androi ...
2021-02-15 · 阅读 3880 · 字数 261
RecyclerView 的用途 recycle,回收,使再循环的意思。 用于展示列表数据,通常量很大。如名字所示,RecyclerView 可以循环使用已创建的 view,以提升性能。 RecyclerView 的添加步骤 layout XML 中添加 RecyclerView layout XML 中设置 LayoutManager。用于设置子项的排列布局方式,例如:LinearLayoutManager,GridLayoutManager,StaggeredGridLayoutManager。 Adapter 中实现 RecyclerView.ViewHolder。view holde ...
2021-02-07 · 阅读 5681 · 字数 66
使用 Android 的 ViewModel 与 LiveData 的代码: class TodoViewModel(private val repository: TodoRepository): ViewModel() { val allTodos: LiveData<List<Todo>> = repository.allTodos.asLiveData() } 编译时报错: Unresolved reference: asLiveData 解决方法 gradle 中添加依赖: implementation "androidx.lifecy ...
2023-05-19 · 阅读 7529 · 字数 470
CoroutineScope withContext lifecycleScope viewModelScope 该如何选择 CoroutineScope, withContext, lifecycleScope, 和 viewModelScope 是 Android 中用于协程管理的不同组件和类。这些组件和类可以帮助您在 Android 应用程序中正确地使用协程。 CoroutineScope:是一个顶层接口,用于管理协程以及它们运行的线程。您可以使用GlobalScope创建全局作用域,但通常建议为每个组件或任务创建自己的范围,以便在需要终止时可以更好地控制它们。 withConte ...
生活 | 跑步 清单 足球 鲁班 探索 孤独的美食家 驾驶 电视剧 收纳 奶爸 健康 game 电影 周末 joke |
---|---|
Geek | 健身 Laravel Git Vim MySQL Linux UI Windows SVN 纪录片 管理 Shell 游记 工具 手机 BackboneJS 自建博客 Mac DNS Tornado CDN Django Python AngularJS 理财 前端 Nginx 爬虫 Redis Javascript Browser 浏览器 推广 OAuth CSS PHP Social Networks 安全 运维 创业 杂记 VueJS Android Image IDE Java ReactJS 数据分析 SQLite RESTful 读书笔记 家电 ecshop Vagrant wordpress docker SEO GTD magento mongodb nodejs weex 冷知识 ruby iOS 微信小程序 AI CMS 快应用 backpack 广告联盟 OA 短信 UWP Win CSharp Tampermonkey graphviz 钉钉 WPS 数据字典 微信公众号 Fuchsia Adobe XD SQL Server thinkphp 代码规范 商业模式 Flutter 头痛的问题 serverless 视频制作 国际化 golang 服务器 Kotlin 网站建设 5G 笔记本 图片 spark spring 物联网 InfluxDB 图像识别 postgre rust 提示词 |
成长的烦恼 | 闲言碎语 待产 不睡觉 写作 程序员 孙心然语录 原则 大鸿语录 |
地球 | 植物 时间 中文 赚钱 国家地理 烟台 一生伏首拜阳明 emoji 弟子规 英文 国际贸易 |