近期将会梳理一下JetPack全家桶的使用,包括DataBinding,Room,ViewModel,LiveData,Navigation等。
本来打算先写DataBinding的使用,没想到在17年的时候已经写过了,这里就补充一点吧,毕竟不是什么新东西
- Android数据绑定技术一,企业级开发
- Android数据绑定技术二,企业级开发
- Android JetPack~ DataBinding(数据绑定)(一) 集成与使用
- Android JetPack~ LiveData (一) 介绍与使用
- Android JetPack~ ViewModel (一) 介绍与使用
目录
- 介绍
- 集成到环境
- 在Activity、Fragment中使用
- BindingAdapter的使用
介绍
DataBinding(数据绑定)发布于2015年的Google I/O大会,旨在减少Android开发中的大量模板代码,增加代码及逻辑清晰度,提高开发效率和维护效率。
它的好处显而易见
- 不用再findViewById(),我们直接可以在xml文件进行属性赋值
- xml中可完成简单的逻辑,如@{ xx==null? a ? b}
- View与逻辑代码解耦性更高,数据与View双向绑定,只需关注数据变化即可
- .....
集成到环境
很早的时候是需要加入依赖的,不过现在只需要更新SDK,下载最新的Android Support库即可。下面依赖仅供参考
配置工程的Gradle
android { … dataBinding { enabled = true } }
在Activity、Fragment中使用
使Activity支持DataBinding,在布局的最外层加入”<layout>”标签即可,直接加在最外层,不会影响已有的代码。
acty_jpack_layout.xml这个文件名随便起,但是后面会用到(系统会帮我生成ActyJpackLayoutBinding)
<?xml version="1.0" encoding="utf-8"?> <layout> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/text_show" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" android:text="ceshi"/> </androidx.constraintlayout.widget.ConstraintLayout> </layout>
在Activity的onCreate方法中
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //通过databinding 把activity和view绑定 ActyJpackLayoutBinding mBinding = DataBindingUtil.setContentView(this,R.layout.acty_jpack_layout); }
在Fragment中onCreateView方法中
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { mBinding = ActyJpackLayoutBinding.inflate(inflater); return mBinding.getRoot(); }
哦,对了,系统还提供其他的用法比如说,在ViewHolder中
class MyHolder extends RecyclerView.ViewHolder { MyBinding binding; MyHolder(View view) { super(view); binding = DataBindingUtil.bind(view); } }
要获取View的子View可以通过DataBindingUtil.getBinding(sunView);
BindingAdapter的使用
这个方法很好用,使用场景也很广,比如说业务需要页面中按钮需要点击后缩放,抬起后还原。也可以加载图片时用Glide框架去加载,而我们只需要在xml文件中加一行代码就OK了。好处就是复用性极高,如果要优化图片质量,只需要在ImageBindAdapter中修改,用到的地方自然就成修改后的。
public class ImageBindingAdapter { @BindingAdapter("imageUrl") public static void imageUrl(ImageView view, String imageUrl){ RequestOptions options = new RequestOptions() .centerCrop() .dontAnimate(); Glide.with(view) .load(imageUrl) .apply(options) .into(view); } }
直接在xml文件中使用
<ImageView android:layout_width="80dp" android:layout_height="80dp" app:imageUrl="@{bean.img}" />
结束!!!
这篇写的很少,主要是之前写过了,有需要可以结合之前两篇。