databinding实践

前言

依稀还记得4年前刚入门的时候,每次写代码都是通过findViewById去拿到控件,然后使用控件。工作1年后,我发现了jakewharton大神的butterknife,然后开始使用资源绑定,那时候为了方便,我在Settings的Plugin里找到了Zelezny插件,控件的拿取都是一键生成的。美滋滋的使用了几年后,我发现了databinding这个东西。讲道理,我一直很反感各种命名各种找控件,databinding给我解决了这个问题。

3种拿到控件方式

  • findViewById:最原始的方式,也是最稳定的方式,缺点是代码多,看起来冗余。
  • butterknife:非常优秀的开源控件,功能也多,使用者多,一直在更新,没得说的。
  • databinding:不管是Androidx时代还是support包的时代,databinding都是支持的,让Android开发也可以像web前端那样数据布局双向绑定了,减少了出错率,提高了效率。麻烦点的地方可能是修改的时候要编译项目吧。

实践一(support时代如何使用databinding)

第一步,在build.gradle的android标签下添加

//打开DataBinding
android {
	dataBinding {
	  enabled = true
	}
}

如果命令报错,可能是gradle版本太低,换成

android {
	buildFeatures {
	        dataBinding = true
	        viewBinding = true
	    }
}

添加标签后会自动引入databinding包的,不需要手动修改dependencies标签

第二步

在布局中将最外层布局替换成<layout>标签,然后编译一下,会自动生成文件,比如activity_main.xml布局,会生成ActivityMainBinding文件

第三步使用

  • Activity中使用,以MainActivity为例
/**
 * @author haizhuo
 */
public class MainActivity extends AppCompatActivity {

    private ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        binding= DataBindingUtil.setContentView(this,R.layout.activity_main);
        //使用DataBinding,绑定后可以直接拿到控件,不需要使用findView去找,也不需要使用ButterKnife了
        //举个例子,设置id为id_content的控件透明度为80%
        binding.idContent.setAlpha(0.8f);
    }
}

  • fragment中使用,以fragment_balance.xml为例
private FragmentBalanceBinding binding;

@Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        binding= DataBindingUtil.inflate(inflater,R.layout.fragment_balance,container,false);
        return binding.getRoot();
    }

后话

双向绑定需要使用到ViewModel,具体实现请查看DataBindingWithSupportDemo

实践二,使用Androidx,jetpack工具

使用Androidx方式的databinding呢,使用方式与上面类似,只是依赖包发生了变化,而且因为jetpack工具的存在,能玩出更多的东西。

后话

相关demo请查看ViewModelDemo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值