您的当前位置:首页正文

DataBinding 笔记

来源:要发发知识网

上面两篇博客写的非常详细了,这里我只是记录自己的问题。

自定义Setter:

用这个绑定ImageView感觉特别棒。

// 自定义加载图片到ImageView
@BindingAdapter({"url","error"})
public static void loadImage(ImageView view, String url, Drawable error){
    Glide.with(view.getContext()).load(url).into(view);
}

注意点:这里error传入的是Drawable对象

<!-- 布局文件 -->
<ImageView 
  app:url=“@{model.imageUrl}”
  app:error=“@{@drawable/error}”/>

如上类似加载图片的方法,其他常用的方法也可以自定义出来,方便使用。

有时候事件绑定不方便,会利用自定义的方式实现:

@BindingAdapter({"navigationOnClick"})
public static void setNavigationOnClick(Toolbar toolbar, View.OnClickListener clickListener){
    toolbar.setNavigationOnClickListener(clickListener);
}
//ViewModel中的方法
public View.OnClickListener getOnClick() {
    return new View.OnClickListener() {
        @Override
        public void onClick(View v) {
              ...
        }
    };
}

<!-- 布局文件 -->
<android.support.v7.widget.Toolbar 
  app:navigationOnClick="@{model.onClick}"/>

遇见的Bug:

当在Activity中创建的Binding,所获取的控件id为null

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   MainActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
   
   //R.layout.main_activity内有TextView,且设置了id="text_view"
   binding.textView
}

不知道为何,这里的binding.textView 为null,找不到这个控件。

其他,在 fragment或者 adapter 中使用 binding不会出现这个问题。


表达式语音:

这里记录几个常用的表达式语言

  • 数学计算 + - / * %
  • 字符串连接 +
  • 类型转换
  • 三元运算符 ?:
  • 逻辑 && ||
  • Null合并运算符
// int类型转换成String类型,可以直接调用String
// int类型可以进行数学计算
android:text="@{String.valueOf(index + 1)}"
// 三元运算符 ?:
// 这里可以直接调用View
android:visibility="@{age < 13 ? View.GONE : View.VISIBLE}"
// 字符串相加
android:transitionName='@{"image_" + id}'
//Null合并运算符(??)会在非 null 的时候选择左边的操作,反之选择右边。
android:text="@{user.displayName ?? user.lastName}"

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

热门图文