美文网首页
DataBinding 笔记

DataBinding 笔记

作者: 帅气Name | 来源:发表于2017-04-14 11:55 被阅读32次

    参考:
    Data Binding Library
    Data Binding指南

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

    自定义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}"
    

    相关文章

      网友评论

          本文标题:DataBinding 笔记

          本文链接:https://www.haomeiwen.com/subject/zfhwattx.html