复习
应用组件(布局 图片 屏幕 地区 状态适配)
- 资源类型
- 应用清单文件
Intent(显式、隐式)
-
显式:组件名称
-
隐式:操作、类型、数据
action:send、main categray:default、view data:mimetype、scheme
四大组件(Service中的新scalable)
视图绑定(bindingView,免findViewById)
android {
...
viewBinding {
enabled = true
}
}
数据绑定库(dataBinding,免代码视图数据更新)
布局根用layout,包含data跟view2个子节点
<data class="自定义绑定类名字">
<varialbe name="viewModel" type="com.jf.viewmodel"></varialbe>
</data>
<data>
<improt type="com.jf.viewmodel" alias(别名)="Vista"></varialbe>
</data>
eg:摘自官方文档
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="user" type="com.example.User"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.lastName}"/>
</LinearLayout>
</layout>
1. 布局和绑定表达式
-
绑定方式:
DataBindingUtil.inflate() DataBindingUtil.setContentView() XXXXXXBinding.inflate() 即时绑定 executePendingBindings() //强制刷新 //伪代码,对于未知的布局,临时设置布局中名为 item 的变量,用于RecyclerView item 动态数据绑定 动态绑定 DataBinding.setVariable(BR.item, item) -
数据引用
属性引用 视图引用 (其他View的属性引到本View) 运算表达式 集合、数组 资源 -
事件绑定
方法引用 @{handle::onClick(View v)} 监听绑定 @{() -> {present.onClick(Obj o)}}
2. 使用可观察的数据对象
注意可观察字段为val, 利用set改变
-
可观察的字段
ObservableField<String> ObservableInt... -
可观察的集合
ObservableArrayMap、ObservableArrayList -
可观察的对象
Observalbe -> BaseObseravable get添加Bindable注解、set添加notifyPropertyChanged 方法
3. 绑定适配器
简单来讲就是布局中属性(特性)设定反射出实际代码逻辑
eg: text = "文本" ——> setText("文本")
静态方法 kotlin 种的object 复习
根据数据引用的返回值 寻找对应的属性相关方法
事件处理脚本(多个方法的接口会被拆分)
对象根据属性类型自动转换
4. 视图与架构组件绑定
视图持有ViewModel,ViewModel 跟 视图联动
5. 双向数据绑定
视图对组件的变化做出相应,组件对视图变化做出响应
eg:单向绑定
<CheckBox
android:id="@+id/rememberMeCheckBox"
android:checked="@{viewmodel.rememberMe}"
android:onCheckedChanged="@{viewmodel.rememberMeChanged}"
/>
eg:双向绑定
简单的双向绑定就是 @={viewModel.name}
<CheckBox
android:id="@+id/rememberMeCheckBox"
android:checked="@={viewmodel.rememberMe}"
/>
自定义的属性使用 @InverseBindingAdapter 和 @InverseBindingMethod 注释 进行双向绑定
生命周期(Lifecycle)
1、LisecycleObserver //观察者
2、LisecycleOwnner //被观察者Activity
可观察的数据对象 LiveData
LiveData.observe()
LiveData 与Room 的使用
LiveData 与 协程 的使用
LiveData 对 生命周期的感知
转换LiveData
Transformations.map = LiveData -> Any
Transformations.switchMap = LiveData<A> -> LiveData<B>