Android 使用View Binding来代替频繁findViewById来得到view

从 Android Studio 3.6 开始,视图绑定能够通过生成绑定对象来替代 findViewById,从而可以帮您简化代码、移除 bug,并且从 findViewById 的模版代码中解脱出来。

  • 在 build.gradle 中就可以方便快捷地开启视图绑定且无须额外引入依赖库

  • 视图绑定会为 Module 中的每一个布局文件生成一个绑定对象

    (activity_awesome.xml → ActivityAwesomeBinding.java,  activity_main.xml-->ActivityMainBinding.java)

  • 布局文件中每一个带有 id 的视图都会在绑定对象中有一个对应的属性,这个属性将拥有正确的类型,并且空安全

  • 视图绑定完美支持 Java 和 Kotlin 编程语言

代码中如何使用。首页android studio的开发版本要3.6.0以上

1.在module的build.gradle文件中。加上一句话。加在文件的android{}里面就行

viewBinding {
    enabled = true
}
// 需要 Android Gradle Plugin 3.6.0android {    viewBinding {        enabled = true    }}

在 Android Studio 4.0 中,viewBinding 变成属性被整合到了 buildFeatures 选项中,所以配置要改成:

// Android Studio 4.0android {    buildFeatures {        viewBinding = true    }}

2. 正常些xml布局文件。要想获取布局文件的view。则每个view都要有id(android:id="@+id/btn")。 注意点。如果是include的view。也要起id,才能找到。

3. 在 Activity 中使用视图绑定

private ActivityMainBinding mBinding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LayoutInflater inflater = getLayoutInflater();
        //由于次activity对应布局文件是activity_main.xml所以会自动绑定ActivityMainBinding类调用inflate方法则可以得到此对象
        mBinding = ActivityMainBinding.inflate(inflater);
        setContentView(mBinding.getRoot());//每个对象都有一个getRoot方法,就是得到这个view

        mBinding.btn.setText("glide");//布局文件中有个按钮的id为btn,直接调用.btn可以得到button对象。
        mBinding.btn.setOnClickListener(this);

    }

使用视图绑定时,无须再调用 findViewById 方法,只要直接调用绑定对象中的对应属性即可。

布局的根视图(无论有没有 id)都会自动生成一个名为 root 的属性。在 Activity 的 onCreate 方法中,要将 root 传入 setContentView 方法,从而让 Activity 可以使用绑定对象中的布局。

注意:

一个常见的错误用法是: 在开启了视图绑定的同时,依然在 setContentView(...)  中传入布局的 id 而不是绑定对象。这将造成同一布局被填充两次,同时监听器也会被添加到错误的布局对象中。

解决方案: 在 Activity 中使用视图绑定时,一定要将绑定对象的 root 属性传入 setContentView() 方法中。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值