首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ViewBinding 视图绑定

ViewBinding 视图绑定

作者头像
100001509164
发布2023-01-16 14:32:22
4340
发布2023-01-16 14:32:22
举报
文章被收录于专栏:DevTipsDevTips

凡所有相,皆是虚妄;若见诸相非相,即见如来。《金刚经》

概述

ViewBinding 是和 Android Studio 3.6 一起发布的,Gradle 要求 3.6.0+,ViewBinding 可以轻松编写可与视图交互的代码,在模块中启用 ViewBinding 后,系统会该模块中的每个 XML 布局文件生成一个绑定类。绑定类中会为所有具有 ID 视图生成对应的引用。

使用

视图绑定功能可以按模块启用。在模块的 build.gradle 文件中添加如下配置。

buildFeatures {viewBinding true}

如果需要将某个布局文件禁用 ViewBinding 功能,可以在布局文件根视图添加如下配置:


<LinearLayout 
  tools:viewBindingIgnore="true">
 </LinearLayout>

为模块启用视图绑定功能后,我们创建的 XML 布局文件会生成一个绑定类。命名规则采用骆驼峰式大小写命名,并在名称末尾添加 "Binding" 后缀。

例如,布局名称假设为 result_profile.xml:


<LinearLayout ... >
<TextView android:id="@+id/name" />
<ImageView android:cropToPadding="true" />
<Button android:id="@+id/button"
android:background="@drawable/rounded_button" />
</LinearLayout>

生成的绑定类名为 ResultProfileBinding。该类具有两个字段:一个是名为name的 TextView,另一个是名为 button 的 Button。该布局中的 ImageView 没有 ID,因此绑定类中不存在对它的引用。

每个 Binding类都实现 ViewBinding 接口,并包含一个 getRoot() 方法,ViewBinding接口的定义如下:

/** A type which binds the views in a layout XML to fields. */
public interface ViewBinding {
/**
     * Returns the outermost {@link View} in the associated layout file. If this binding is for a
     * {@code <merge>} layout, this will return the first view inside of the merge tag.
     */
@NonNull
View getRoot();
}

getRoot() 方法返回XML的根视图,上述例子 getRoot() 方法返回 LinnerLayout 根视图。

Activity 中使用视图绑定

在 Activity使用,需要在 onCreate() 方法中执行如下步骤:

1. 调用绑定类的 inflate() 方法。该方法会生成该绑定类的实例。

2. 通过调用上述步骤生成的 Binding类实例的 getRoot() 方法获取根视图的引用。

3. 调用 setContentView() 方法,将根视图与Activity 绑定。


private ResultProfileBinding binding;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
        binding = ResultProfileBinding.inflate(getLayoutInflater());
        View view = binding.getRoot();
        setContentView(view);
    }
   

现在,使用 binding 变量可以直接获取 TextView 类型的 name 视图。

 binding.getName().setText(viewModel.getName());
    binding.button.setOnClickListener(new View.OnClickListener() {
        viewModel.userClicked()
    });

Fragment 中使用视图绑定

在 Fragment 中使用,需要在 onCreateView() 方法中执行如下步骤:

1. 调用绑定类的 inflate() 方法。该方法会生成该绑定类的实例。

2. 通过调用上述步骤生成的 Binding类实例的 getRoot() 方法获取根视图的引用。

3. 从 onCreateView() 方法返回根视图,以供 Fragment 使用。

 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;
    }
    
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-12-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevTips 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档