技术/笔记/《第一行代码:Android》读书笔记 (一)
Android
Kotlin
读书笔记
第一章 开启征程(概要)
- 项目结构与目录:page 17 - page 19
- Log 方法与 Logcat 的完美结合
第二章 Kotlin 语法糖
同《Kotlin 学习笔记》一同食用更佳!
《第一行》中出现的 Kotlin 特性预览表
主次构造函数 | 参数默认值 | 键值对传参 | 字符串内嵌表达式 |
---|---|---|---|
init {}, constructor () {} |
fun xxx(str: String = "") {...} |
xxx(str = "...") |
"${value}" |
标准函数 | Lambda 表达式 | 空指针检查 | 函数式 API |
---|---|---|---|
let, run, apply, with |
{para -> ...}, {it.toString()} |
? ?. !!. ?: |
map.maxby {/*Lambda*/} |
容器初始化 | 数据类 | 单例类 | 循环遍历 |
---|---|---|---|
listOf(), mapOf(), setOf() |
data |
object |
for-in, until, downTo, step, l...r, 容器遍历 |
分支控制 | 条件控制 | “不变为先” | 访问控制 |
---|---|---|---|
when () {... -> ...}, if-else 语句/表达式 |
is (instanceof), else |
val, var, open class |
"public by default" |
类型强转 | repeat 函数 | 运算符重载 | 延迟初始化 |
---|---|---|---|
as, as? |
repeat(/*num*/) {/*Lambda*/} |
operator 关键字 |
lateinit |
初始化判断 | 密封类(与when语句一同使用) | 扩展函数 | 无用参数 |
---|---|---|---|
::($变量名).isInitialized |
sealed class |
fun ClassName.funcName(...) : ... {} |
下划线_ |
函数类型 | 高阶函数 | 内联函数 | 可变参数 |
---|---|---|---|
ClassName.(paraType, ...) -> returnType |
接受/返回函数类型/Lambda表达式 的函数 |
inline noinline crossinline |
vararg |
Pair 类型 | Smart Cast 自动转型 | 泛型 | 委托 |
---|---|---|---|
A to B , 泛型 |
is Type 判断后实例自动向下转换类型 |
<T> |
类委托、属性委托 |
第三章 Activity!所见即所得
创建 Activity
- 创建和加载布局文件 layout
- 在 AndroidManifest.xml 中注册Activity
- 编写 Activity.kt 代码 (事件绑定,方法重写等)
Activity 通信与切换
-
Intent 类
- 显式切换:
Intent(上下文, 指定Activity 的 Class 类)
- 隐式切换:指定
action
category
,目标将会按照注册信息中的过滤条件响应 intent。- 过滤条件:
<category> <action> <data>
- 过滤条件:
- 传参:
.putExtra(), .getStringExtra()
- 启动方式:
startActivity() //普通启动
startActivityForResult() //请求结果
- Activity 类 Result 结果 - 设置结果:
setResult()
- 取回结果:
override onActivityResult()
- Bundle 类
- 团队合作时用伴生类“静态方法”来启动
- 显式切换:
-
Activity 生命周期
-
返回栈的概念
-
思维导图
-
- 保存信息
- Bundle 类型
onSaveInstanceState()
,var savedInstanceState
- Activity 启动模式
- standard 无检查,直接压栈
- singleTop 检查栈顶
- singleTask 解栈恢复
- singleInstance 创建新栈
第四章 UI!! 门面功夫 😃
控件 Widget
- 基本控件:TextView,EditView,Button,……
- 自定义控件:编写class(注入布局,绑定事件) xml注册引入自定义控件 引入控件
- 高级一点的控件:ListVIew, RecyclerView …
基本原理撇清楚
Inflater
的作用:将xml格式的布局文件解析转化成View的实例findViewById()
返回布局中指定id的View实例, 在Activity类中直接使用findViewById()
相当于在当前Activitiy所加载的布局中寻找对应的view,而使用view.findViewById()
则指定了寻找的区域是view内
留意Kotlin自动类型推导机制的使用场合,方法