昨天学习了LifeCycle ViewModel LiveData,今天学习一下DataBinding
使用DataBinding 的意义
让布局文件承担了原属于页面的工作,使页面布局耦合度进一步降低
DataBinding的优势
不在需要findViewById,项目更加简洁,可读性更高。
布局文件可以包含简单的业务逻辑。
使用DataBinding
在 build.gradle 文件中配置 在defaultConfig方法下
dataBinding{
enabled = true
}
DataBinding 意义与应用
xml 文件中按住alt+回车 生成data,Idol 是实体类,idol可以理解为对象
TextView 展示
Activity 相关代码
ActivityDataBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_data);
Idol idol = new Idol("洛洛亚索隆",2);
binding.setIdol(idol);
加载网络/本地图片
//java 代码
public class ImageViewBindingAdapter {
@BindingAdapter("image")
public static void setImage(ImageView imageView, String url){
if(!TextUtils.isEmpty(url)){
Picasso.get()
.load(url)
.placeholder(R.drawable.ic_launcher_background)
.into(imageView);
}else{
imageView.setBackgroundColor(Color.GRAY);
}
}
}
xml 文件 type 指的是 name 对象的类型
ImageView
这个image 这个属性 一定要是 BindingAdapter 带注解的这个东西@BindingAdapter(“image”)
app:image=“@{networkImage}”
使用过RecycleView 绑定
Xml 中需要注意的 itemImage 属性为
ImageViewBindingAdapter 中 @BindingAdapter(“itemImage”)
ImageViewBindingAdapter 代码如下
public class ImageViewBindingAdapter {
@BindingAdapter("itemImage")
public static void setImage(ImageView imageView, String url){
if(!TextUtils.isEmpty(url)){
Picasso.get()
.load(url)
.placeholder(R.drawable.ic_launcher_background)
.into(imageView);
}else{
imageView.setBackgroundColor(Color.GRAY);
}
}
}
主要的绑定关系没有在activity中,而是在Item 中 ItemBinding
public class RecyclerViewAdapter extends RecyclerView.Adapter{ List idols; public RecyclerViewAdapter(List idols) { this.idols = idols; } @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { //导入布局 ItemBinding itemBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.item, parent, false); return new MyViewHolder(itemBinding); } @Override public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { Idol idol = idols.get(position); holder.itemBinding.setIdol(idol); } @Override public int getItemCount() { return idols.size(); } static class MyViewHolder extends RecyclerView.ViewHolder { private ItemBinding itemBinding; public MyViewHolder(@NonNull ItemBinding itemBinding) { super(itemBinding.getRoot()); this.itemBinding = itemBinding; } } }
Kotlin RecycleView使用 DataBinding 的Adapter
自己练习的时候写的代码,让自己慢慢适应Kotlin
class StudentRecyclerViewAdapter(var items: List) : RecyclerView.Adapter () { override fun onCreateViewHolder( parent: ViewGroup, viewType: Int ): StudentRecyclerViewAdapter.ViewHolder { val itemBinding: ItemBinding = DataBindingUtil.inflate( LayoutInflater.from(parent.context), R.layout.item, parent, false ) return ViewHolder(itemBinding) } override fun getItemCount(): Int = items.size override fun onBindViewHolder(holder: StudentRecyclerViewAdapter.ViewHolder, position: Int) { holder.itemDataBindX.student = items[position] } class ViewHolder(itemBinding: ItemBinding) : RecyclerView.ViewHolder(itemBinding.root) { var itemDataBindX:ItemBinding = itemBinding } fun setStudents(students: List ) { items = students } }



