谷歌的databinding常见用法

谷歌的databinding非常好用,但是前提你得熟悉各种用法,否则坑很多,很容易从入门到放弃。

后来在实际开发中,碰到很多问题,经过自己的探索和修改,逐渐提升了对databinding的熟练度,下面我会额外讲解其常见用法

强烈建议封装在自己的ViewModel中再使用,既方便管理,也符合规范

1.常见的TextView的文字加载非常简单
如果需要直接拼接一些文字,则需要特殊的单引号

android:text="@{bean.text}"
android:text="@{bean.text+ `元`}"

2.图片加载
图片加载需要使用一个特殊的注解BindingAdapter
详细用法请参考

Databinding中ImageView的用法和坑(Java和Kotlin),附带Glide用法

public class BaseViewModel {
    @BindingAdapter({"app:imgRes"})
    public static void setImageView(ImageView imageView, int res) {
        imageView.setImageResource(res);
    }
     @BindingAdapter({"app:imgUrl"})
    public static void setImageView(ImageView imageView, String url) {
        if(TextUtils.isEmpty(url)){
            return;
        }
        Glide.with(imageView.getContext()).load(url).into(imageView);
    }


    public int switchStatusImage() {
        int imgRes = 0;
        switch (需要判断的值) {
            case 0:
                imgRes = R.drawable.icon_******;
                break;
            case 1:
                imgRes = R.drawable.icon_******;
                break;
            case 3:
                imgRes = R.drawable.icon_******;
                break;
            default:
                break;
        }
        return imgRes;
    }
}

其中viewModel.switchStatusImage() 只是封装而已,其实就是一个图片地址的引用

app:imgRes="@{viewModel.switchStatusImage()}"

3.visibility
有时候有一些控件需要在特定的条件下隐藏或者显示,那该怎么办呢?
注意,如果不进行ViewModel的封装,而是直接使用,需要在xml当中导包

<import type="android.text.TextUtils"/>
<import type="android.view.View"/>
****
*****
****
android:visibility="@{TextUtils.isEmpty(bean.status) ? View.VISIBLE : View.GONE}"

4.颜色 textColor

<import type="android.text.TextUtils"/>
<import type="androidx.core.content.ContextCompat"/>
<import type="com.你自己项目的包名.R"/>
****
****
****
android:textColor="@{TextUtils.isEmpty(bean.status) ? ContextCompat.getColor(context,R.color.green_61A71F):ContextCompat.getColor(context,R.color.black_333333)}"

5.特殊字符
databinding 如果在设置text属性时,一些特殊字符是无法直接使用的,在编译的时候回报错,比如空格、“|”等等
这个时候需要使用string的引用来完成

android:text="@{bean.house_type +@string/separator+ bean.space +`m²`}"

不过后来实际开发发现,空格的引用也是无效的,如果封装在ViewModel中使用则跟普通的text一样
比如

public String description() {
        return   " | " + mRoomsBean.getSpace() + "m²";
}
***
***
***
android:text="@{viewModel.description()}"

6.点击事件

 /**
 * 跳转到拨号界面,同时传递电话号码
*/
public void skipToCallActivity(Context context, String phoneNumber) {
    Intent dialIntent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + phoneNumber));
    context.startActivity(dialIntent);
}
***
***
***
android:onClick="@{() -> viewModel.skipToCallActivity(context,bean.phone)}"

ps:如果封装成ViewModel,则需要额外导包

注意,所有的方法都是public 才能使用

<data>
     <variable
        name="bean"
        type="com.*******.Bean"/>

      <variable
          name="viewModel"
          type="com.*******.ViewModel"/>
    </data>
binding.setBean(bean);
binding.setViewModel(new ViewModel(bean));
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Dinding是一种通过机制,将代码中的数据和XML(UI)进行绑定的技术。它允许双方都能对数据进行操作,并在数据发生变化时自动刷新数据。 在Android中,我们可以使用DataBindingUtil类的方法来创建Databinding实例,即通过DataBindingUtil.inflate(LayoutInflater, layoutId, parent, attachToParent)或DataBindingUtil.bindTo(viewRoot, layoutId)方法来得到绑定对象。 Databinding主要解决了Model层与View交互的问题,并且现在也支持双向绑定。它的优势在于可以简化代码,使得数据与UI更紧密地结合。我们可以通过一个登录的例子来进一步感受Databinding的优势。你可以下载并查看一个登录的Demo,或者自己编写相关的例子来深入理解Databinding用法和好处。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [DataBinding详解](https://blog.csdn.net/peiyuWang_2015/article/details/76945081)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [DataBinding使用教程详解](https://blog.csdn.net/zhangwude2301/article/details/80069972)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值