乐趣区

关于android:Android-Jetpack-全家桶全面学习-使用databinding

应用 databinding

通过 databinding 性能,能够更轻松地编写可与视图交互的代码。在模块中启用 databinding 之后,零碎会为该模块中的每个 XML 布局文件生成一个绑定类。绑定类的实例蕴含对在相应布局中具备 ID 的所有视图的间接援用。

在大多数状况下,databinding 会代替 findViewById

启用 databinding,须要在模块的 gradle 文件中增加

android {
 // ....
 dataBinding {enabled true}
}

在 layout 中,增加 <layout> 标签。例如 act_data_binding_1.xml 文件。其中蕴含了 data 标签与 view 标签,view 标签的内容就是不应用 DataBinding 时的一般布局内容

<layout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:binding="http://schemas.android.com/tools">
​
 <!-- 根视图 -->
 <LinearLayout.... />
​
</layout>

零碎会通过以下形式生成绑定类的名称:将 XML(layout)文件的名称转换为驼峰式大小写,并在开端增加“Binding”一词。下面的 xml 会生成 ActDataBinding1Binding 类。咱们能够间接应用这个类。

DataBindingAct1 中,也须要调用setContentView

public class DataBindingAct1 extends AbsActivity {
​
 ActDataBinding1Binding binding;
​
 @Override
 protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
 binding = ActDataBinding1Binding.inflate(getLayoutInflater());
 setContentView(binding.getRoot());
​
 binding.tv1.setText("当初能够间接应用 layout 中的 TextView 了");
 binding.tv2.setText("能够不必 findViewById");
 }
}

能够看到,咱们不必写那么多 findViewById 了。能够间接应用 binding。每个绑定类还蕴含一个 getRoot() 办法,用于为相应布局文件的根视图提供间接援用。在此示例中,ActDataBinding1Binding类中的 getRoot() 办法会返回 LinearLayout 根视图。

应用 DataBindingUtil

后面在 onCreate 中应用了 ActDataBinding1Binding.inflate(getLayoutInflater()),咱们也能够换用DataBindingUtil.setContentView

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
 binding = DataBindingUtil.setContentView(this, R.layout.act_data_binding_1);
 // ...
}

binding 与 findViewById 的区别

与应用 findViewById 相比,视图绑定具备一些很显著的长处:

  • Null 平安:因为视图绑定会创立对视图的间接援用,因而不存在因视图 ID 有效而引发 Null 指针异样的危险。此外,如果视图仅呈现在布局的某些配置中,则绑定类中蕴含其援用的字段会应用 @Nullable 标记。
  • 类型平安:每个绑定类中的字段均具备与它们在 XML 文件中援用的视图相匹配的类型。这意味着不存在产生类转换异样的危险。

这些差别意味着布局和代码之间的不兼容性可能会导致编译版本在编译时(而非运行时)失败。

根底 Activity 示例

咱们设计一个抽象类 BaseAct 封装一些罕用操作,它指定了继承自 ViewDataBinding 的范型。

/**
 * activity 抽象类
 */
public abstract class BaseAct<B extends ViewDataBinding> extends AppCompatActivity {
​
 protected B binding;
​
 /**
 * @return 界面对应的 layout id
 */
 protected abstract int getLayoutId();
​
 @Override
 protected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);
 binding = DataBindingUtil.setContentView(this, getLayoutId());
 }
}

实现类继承 BaseAct,指定 ViewDataBinding 的子类后,间接能够应用 binding 对象了。

public class MainActivity extends BaseAct<ActMainBinding> {
​
 @Override
 protected int getLayoutId() {return R.layout.act_main;}
​
 @Override
 protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
 // 具体操作
 }
​
 @Override
 public void onBackPressed() {​}
}

Android Jetpack 知识点强化实战

一,初识 ConstraintLayout 之实现登录页面

1)创立我的项目
2)沉迷式的布局
3)富文本
4)属性动画

二、Navigation 实际之实现 APP 主框架以及 Navigation 的相干介绍

1)搭建 Bottom Navigation Activity
2)导航界面跳转
3)Navigation 传值
4)Navigation 跳转动画
5)导航文件拆分
6)Deeplink 导航

三、应用 Coroutines,Retrofit,模式实现网络数据申请

1)kotlin – Coroutine 协程
2)用协程和 Retrofit 实现网络申请

四、应用 TabLayout,ViewPager2,RecyclerView 实现实现歌单广场页面

1)ViewPager2
2)TabLayout
3)RecyclerView
4)网络数据申请和数据填充
5)优化界面

五、歌单页面 MVVM 架构革新及其 ViewModel 和 LiveData 的应用介绍

1)MVC 和 MVVM 介绍
2)批改歌单页面

六、Paging 实现加载更多和下拉刷新,谬误后从新申请

1)Paging 的劣势
2)Paging 实现分页加载更多
3)Paging 和 SwipRefreshLayout 组合实现下拉刷新
4)给 RecyclerView 增加加载状态的 Footer
5)产生网络谬误后重试
6)帧动画

七、vlayout 嵌套横向 RecyclerView 和 Banner 实现主页的展现,自定义 Moshi 的 JsonAdapter

1)vlayout 架构剖析
2)vlayout 布局介绍
3)根底工作筹备
4)vlayout 实现轮播图
5)字段内容类型不统一

八、Room 数据库实现增删改查和事务处理

1)增加 Room 依赖
2)Room 具体介绍
3)DataBase 创立时插入数据
4)Room 实现歌单标签编辑界面的增删改查

九、Room 数据库 Migration

1)新建 Entity
2)新建 Dao
3)批改 Database
4)批改 HomeViewModel
5)Migration

十、ExoPlayer 进行视频播放的实现

1)ExoPlayer 介绍
2)ExoPlayer 简略的应用办法
3)ExoPlayer 简略自定义
4)ExoPlayer 高级自定义
5)ExoPlayer 在 RecyclerView 中的复用

十一、MotionLayout 让动画如此简略

1)MotionLayout 根底
2)关键帧 Keyframes
3)代码启动动画和监听动画
4)MotionLayout 案例剖析

十二、Kotlin Flow 基础知识详解

1)Flow 引入的场景
2)Flow 的个性
3)Flow 的构造函数
4)Flow 两头运算函数
5)Flow 完结函数
6)Flow 的谬误异样解决
7)Flow 的勾销
8)StateFlow / MutableStateFlow

十三、Kotlin Flow 我的项目实战 - 网络、数据库和 UI 的利用

1)MVVM 架构中留给 Flow 的地位
2)网络数据申请
3)UI 相干 – 输入框中输出关键词
4)数据库

十四、View Binding 代替 ButterKnife 和 Kotlin synthetics

1)解决 findViewById 的难过
2)View Binding 的应用
3)从 Kotlin synthetics 迁徙到 View Binding

篇幅无限,这里只展现了目录纲要和局部内容截图,须要《Android Jetpack 知识点强化实战》完整版的敌人能够点击此处收费支付!

退出移动版