- 更好的阅读体验请客观移步至个人博客:🦉William@blog(站点右上角有关键字查询可以查看当前文章。)
《第一行代码:Android》读书笔记 (一)
第一章 开启征程(概要)
- 项目结构与目录: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 生命周期
-
返回栈的概念
-
思维导图
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w3XKYefA-1599968430391)(https://raw.githubusercontent.com/BAIDI-coder/PicGo/master/img/image-20200529100001541.png)]
- 保存信息
- Bundle 类型
onSaveInstanceState()
,var savedInstanceState
- Activity 启动模式
- standard 无检查,直接压栈
- singleTop 检查栈顶
- singleTask 解栈恢复
- singleInstance 创建新栈
第四章 UI!! 门面功夫 😃
控件 Widget
- 基本控件:TextView,EditView,Button,……
- 自定义控件:编写class(注入布局,绑定事件) → \rightarrow → xml注册引入自定义控件 → \rightarrow → 引入控件
- 高级一点的控件:ListVIew, RecyclerView …
基本原理撇清楚
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5eVZRu23-1694164791815)(https://img-service.csdnimg.cn/img_convert/d1f000d72461c1e2fe160cb340006793.png)]
Inflater
的作用:将xml格式的布局文件解析转化成View的实例findViewById()
返回布局中指定id的View实例, 在Activity类中直接使用findViewById()
相当于在当前Activitiy所加载的布局中寻找对应的view,而使用view.findViewById()
则指定了寻找的区域是view内
留意Kotlin自动类型推导机制的使用场合,方法
*第五章 手机平板要兼顾,探究Fragment
学习内容:Frag 生命周期,Frag 动态加载布局
的区域是view内
留意Kotlin自动类型推导机制的使用场合,方法
*第五章 手机平板要兼顾,探究Fragment
学习内容:Frag 生命周期,Frag 动态加载布局