Android |(十)findViewById升级之旅【viewbinding】

视图绑定演进

  • findViewById ==》findViewByMe插件自动生成
  • ButterKnife
  • Kotlin android extension
  • DataBinding(ViewBinding……)

一、findViewByTd

        淘汰findViewById之前,我们先考虑:为什么用findViewById?findViewById有什么缺点?

一个简单的使用findViewById(用于初始化)的例子:

        在java中,如果一个变量没有初始化就使用它,就会报NullPointerException(空指针异常)也就是说,如果将 button = findViewById(R.id.button); 注释掉,程序会闪退

        当XML中有很多组件,每个组件都需要调用findViewById,太麻烦了,因此要用ViewBinding 对其进行简化

二、findViewByMe

1.引入插件

2.在xml文件中,单击右键找到findViewByMe插件

3.会发现已经帮我们写好了代码,我们只用复制粘贴既可以直接使用了

三、 ButterKnife 和 Kotlin Android Extensions

ButterKnife :早期很流行,现在已经不推荐使用

参考:https://github.com/JakeWharton/butterknife

Kotlin Android Extensions:只能使用kotlin语言,不需要写任何代码,可以直接引用控件,但官方已经不再提倡

四、ViewBinding

参考:视图绑定  |  Android Developers

      在模块(所以是模块级的gradle文件)中启用ViewBinding后,它会为该模块中显示的每个 XML 布局文件生成一个绑定类(若:activity_main.xml文件,则:绑定类名称ActivityMainBinding)

  • 绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。 
  • 每个绑定类还包含一个 getRoot() 方法,用于提供相应布局文件的根视图的直接引用。

(一)启动ViewBinding

注意Android Studio的版本: AS| Android Studio版本-CSDN博客

4.0之前(比较旧的版本了)


android {……     
    viewBinding{
        enabled = true
    }
 

4.0以后

//Groovy版:去掉等号
android {……
    buildFeatures {
        viewBinding = true
    }
}

(二)使用ViewBinding

1.在Activity中使用,onCreate()

 //调用生成绑定类的静态 inflate() 方法:创建该绑定类的实例以供 Activity 使用
    binding = ActivityMainBinding.inflate(getLayoutInflater());
//获取对根视图的引用,将根视图传递给 setContentView(),使其成为屏幕上的活动视图
    setContentView(binding.getRoot());

2.在Fragment中使用,onCreaView()

private ResultProfileBinding binding;

@Override
public View onCreateView (LayoutInflater inflater,
                          ViewGroup container,
                          Bundle savedInstanceState) {
    binding = ResultProfileBinding.inflate(inflater, container, false);
    View view = binding.getRoot();
    return view;
}

@Override
public void onDestroyView() {
    super.onDestroyView();
    binding = null;
}

  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值