JetPack学习笔记之DataBinding(四)

JetPack学习笔记之DataBinding(四)

为了让布局文件能够承担更多的工作,处理更复杂的业务逻辑,DataBinding库允许我们自定义BindAdapter,下面将通过ImageView演示如何自定义BindAdapter。

1、准备工作,添加Picasso依赖,分配网络权限。
    implementation 'com.squareup.picasso:picasso:2.71828'

2、编写处理图片的BindAdapter类。
/**
 * 项目名称 JetPackPro
 * 创建人 xiaojinli
 * 创建时间 2020/8/7 12:19 PM
 **/
public class ImageViewBindingAdapter {

    @BindingAdapter("image")
    public static void setImage(ImageView imageView,String imageUrl){
        if(!TextUtils.isEmpty(imageUrl)){
            Picasso.get()
                    .load(imageUrl)
                    .placeholder(R.mipmap.ic_launcher_round)
                    .error(R.drawable.ic_launcher_background)
                    .into(imageView);
        }else{
            imageView.setBackgroundColor(Color.BLACK);
        }
    }
}

注意

  • 其中的方法均为静态方法,第一个参数为调用者本身,第二个参数是布局文件在调用该方法时需要传递过来的参数。
  • 在静态方法前添加注解
3、在布局文件中使用BindAdapter类

首先在布局文件中定义一个变量,用于存放网络图片的地址。

        
     

在ImageView中通过标签调用静态方法

        
4、在Activity中为布局变量赋值
 binding.setNetworkImage("https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1337486992,1705035034&fm=26&gp=0.jpg");

运行结果如下:


image.png

在BindingAdapter中使用重载方法。

比如可以定义如下的重载方法:

    /**
     * 显示本地图片
     * @param imageView
     * @param localImage
     */
    @BindingAdapter("image")
    public static void setImage(ImageView imageView,int localImage){
        imageView.setImageResource(localImage);
    }

在布局文件中的使用方式与上面相同,都是先定义变量,然后在View中调用


        
            


...
        
            
            

在Activity中传入参数值

binding.setLocalImage(R.mipmap.localimage);

你可能感兴趣的:(JetPack学习笔记之DataBinding(四))