首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android:Jetpack之视图绑定——ViewBinding

Data Binding→数据绑定,可使用声明式将布局中的界面组件绑定到应用中的数据源; Lifecycles→生命周期感知,可感知和响应Activity和Fragment的生命周期状态的变化; LiveData... 编译后,AGP会为Module中包含的XML布局文件生成一个绑定类,类名规则: XML文件名转换为Pascal大小写,并加上Binding,比如:result_profile.xml...var tvItem: TextView = binding.tvItem } } ⑦ 自定义ViewGroup ViewGroup子类才能使用视图绑定,View子类不可使用,示例如下...: Binding VBHelper 5.原理 AGP会为模块中每个XML生成一个绑定类,该类的实例会直接引用布局中声明了资源id的View ① 自动生成的绑定类 打开:module...DataBinding都有,不需要数据绑定,单纯想替代findViewById可以用ViewBinding。

1.1K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android:Jetpack之视图绑定——ViewBinding

    Data Binding→数据绑定,可使用声明式将布局中的界面组件绑定到应用中的数据源; Lifecycles→生命周期感知,可感知和响应Activity和Fragment的生命周期状态的变化; LiveData... 编译后,AGP会为Module中包含的XML布局文件生成一个绑定类,类名规则: XML文件名转换为Pascal大小写,并加上Binding,比如:result_profile.xml...var tvItem: TextView = binding.tvItem } } ⑦ 自定义ViewGroup ViewGroup子类才能使用视图绑定,View子类不可使用,示例如下...: Binding VBHelper 5.原理 AGP会为模块中每个XML生成一个绑定类,该类的实例会直接引用布局中声明了资源id的View ① 自动生成的绑定类 打开:module...DataBinding都有,不需要数据绑定,单纯想替代findViewById可以用ViewBinding。

    1.7K30

    【JetPack】视图绑定 ( ViewBinding ) 各种应用 ( 视图绑定两种方式 | Activity 布局 | 对话框布局 | 自定义组件布局 | RecyclerView 列表布局 )

    , 就是使用的这种方式 , 调用该方法后 , 可以直接与界面进行绑定 , 界面中显示的就是 XxxBinding 对应的布局内容 ; II ....使用视图绑定类设置 binding.textView.setText("视图绑定 ( ViewBinding ) 示例"); // 4 ....; ① 获取视图绑定类 : 使用 DialogBinding binding = DialogBinding.inflate(getLayoutInflater()) 只是单纯的加载布局 ; ② 关联界面...Adapter 适配器的 onCreateViewHolder( ) 方法中进行初始化 , 只有在这里才能拿到 ViewGroup parent 关联组件的父类容器 ; ② 初始化视图绑定类并关联界面...: public ViewHolder(ItemBinding binding) 传入视图绑定类 , 在构造函数中使用视图绑定类初始化 ViewHolder 中的组件 , 注意别忘了先调用父类的方法

    1.6K30

    Android的DataBinding原理介绍

    Activity在inflate layout时,通过DataBindingUtil来生成绑定,从代码看,是遍历contentView得到View数组对象,然后通过数据绑定library生成对应的Binding...绑定过程 首先,会在父类(ViewDataBinding)中实例化回调或Handler,用于之后的绑定操作; private static final boolean USE_CHOREOGRAPHER...判断是否需要重新绑定并执行,在生成的Binding类中实现 // 生成的Binding类中得方法 protected boolean onFieldChange(int localFieldId, Object...事件处理 事件处理的原理很简单,在生成Binding类中会实现View事件的监听,在构造时实例化View的事件监听,然后在绑定时将事件监听对象赋值给对应View,这样,点击时就会触发相应的监听。...这里以 DataBindingDemo 中 EventActivity部分为例: 生成的Binding类并实现View的事件监听 public class ActivityEventBinding extends

    2.8K80

    spring boot 使用ConfigurationProperties注解将配置文件中的属性值绑定到一个 Java 类中

    @ConfigurationProperties 是一个spring boot注解,用于将配置文件中的属性值绑定到一个 Java 类中。...功能介绍:属性绑定:@ConfigurationProperties 可以将配置文件中的属性值绑定到一个 Java 类中的属性上。...通过在类上添加该注解,可以指定要绑定的属性的前缀或名称,并自动将配置文件中对应的属性值赋值给类中的属性。...自动装配:使用 @ConfigurationProperties 注解的类可以轻松地与 Spring Boot 的自动装配机制集成。...当配置文件中的属性值被绑定到类的属性上后,可以通过依赖注入等方式在应用程序的其他组件中直接使用这些属性值。属性验证:@ConfigurationProperties 支持属性值的验证。

    66320

    MVVM架构篇之databinding源码解析

    大家进入源代码中查看会发现,其内部只不过是通过while来不断的遍历当前view的父view来判断该父view是否绑定了ViewDataBinding。...2.了解ViewDataBinding 首先大家都知道每个使用了databiding的xml文件经过编译之后都会自动生成一个继承于ViewDataBinding的文件,这个类是该xml文件view的管理类...每一次设置这些字段都会调用父类的requestRebind()方法来异步绑定我们设置的数据。这个我们在后面会进行源码解析。...2.executeBindings() 这个方法就是为xml文件中的view设置我们绑定数据的具体方法了,该方法在父类中是抽象方法,具体实现每一个xml对应的类都是不同的。...比如说onPreBind(ViewDataBinding binding)会在executeBindings()调用之前被调用。onCanceled(T binding) 会在绑定取消的时候调用。

    1.3K40

    使用视图绑定替代 findViewById

    由于生成的绑定类是普通的 Java 类,并且其中添加了 Kotlin 友好的注解,所以 Java 和 Kotlin 都可以使用视图绑定。...视图绑定生成的代码是怎样的 如前文所说,视图绑定会生成一个包含替代 findViewById 功能的 Java 类。...在 ActivityAwesomeBinding.java 中,视图绑定生成了一个只有一个参数的 inflate 方法,该方法通过将 parent 设定为空值来指定当前视图不会绑定到父视图中;视图绑定也暴露了一个有三个参数的...在每个绑定对象中,都会暴露三个静态方法来创建绑定对象实例,下面是每个方法使用场景的简要说明: inflate(inflater) -- 在例如 Activity onCreate 方法里,这类没有父视图需要被传入的场合使用...虽然 ButterKnife 会在运行时校验可空与不可空,但是编译器并不会检查您匹配的视图是否在存在于您的布局之中。 为了安全性与更简洁代码,我们推荐尝试使用视图绑定。

    1.6K30

    Android DataBinding 数据绑定

    数据绑定的使用 布局文件的改造 使用数据绑定的布局文件以标签作为根节点,表明这是个数据绑定的布局,修改后数据绑定框架会生成对应的*Binding类,如content_main.xml会生成...可以看到,每一个标签声明的变量都有一个专属的标记位,当改变量的值被更新时,对应的脏标记位就会置为1,executeBindings的时候变回将这些变动更新到对应的控件。...的最后,会通过InverseBindingListener发送通知,InverseBindingListener的实现中,会去对应的View中取得控件中最新的值,并检查*Binding类是否为空,非空的话则调用对应的方法更新数据...生成的类方法数方面demo中大约是每个布局20个方法,具体跟布局内的变量数量(每个变量对应一个get、set方法)、双向绑定的数量(每个会多一个InverseBindingListener匿名类)有关,...绝大部分的逻辑在生成的*Binding类中,即数据绑定框架在编译期帮我们做了大量的工作,生成模板代码,实现绑定逻辑,是否为空检查,生成代理类,代码的可靠性也是由编译期的处理程序保证,有效的降低了人为出错的可能性

    2.7K70

    WPF Binding学习(四) 绑定各种数据源

    ListView是ListBox的派生类,而GridView是ViewBase的派生类,ListView中的View是一个ViewBase对象,所以,GridView可以做为ListView的View来使用而不能当作独立的控件来使用...这里使用理念是组合模式,即ListView由一个View,但是至于是GridVIew还是其它类型的View,由程序员自己选择。...上面使用的XmlDataProvider,这两个类的父类都是DataSourceProvider抽象类。      现在做一个这样例子。    ...6.使用RelativeSource当绑定源  当一个Binding有明确的来源的时候,我们可以通过Source或者ElementName赋值的办法让Binding与之关联。...Self:引用正在绑定的元素,允许你该元素的一个属性绑定到同一元素的其他属性上。   FindAncestor:引用数据绑定元素的父链中的上级。

    4.3K30

    Android基于DataBinding+Koin实现MVVM模式页面快速开发框架

    使用效果 在 Android 应用中页面显示几乎是每个应用必不可少的功能,要让页面布局在手机上进行显示绝大多数情况都是使用 Activity/Fragment 来承载;而创建一个 Activity/Fragment...BaseBindingActivity泛型填写布局自动生成的 Binding 类,然后在实现的 initDataBinding方法中绑定界面数据即可。...创建对应布局的 Binding 类,也就是传入的泛型的实例 • 通过 setContentView 将实例化的 Binding 对象的 root View 设置给当前 Activity • 调用子类实现的...同样的先看一个简单的时序图: 时序图解析: • 事件通过 Activity 传到到 View • Binding 里监听到事件后将事件传递到 ViewModel • ViewModel 中调用父类 BaseViewModel...所有事件都是通过一个 Event 类进行包裹,源码如下: class Event(private val value: T) { //是否已被处理 private var handled

    1.5K20

    butterknife 源码分析

    这样有一个好处,确保工具类是单例的,因为 init 方法只会在初始化的时候调用。...TypeElement type = entry.getKey(); BindingSet.Builder builder = entry.getValue(); //获取 type 的父类的...Trying superclass " + cls.getSuperclass().getName()); // 在原来的类查找,查找不到,到父类去查找 bindingCtor...是否是我们目标文件,是的话,进行处理,不是的话,直接返回,并打印相应的日志 利用类加载器加载我们自己生成的 class 文件,并获取其构造方法,获取到,直接返回。...获取不到,会抛出异常,在异常的处理中,我们再从当前 class 文件的父类去查找。并把结果存进 map 集合中,做缓存处理。 我们对 ButterKnife 的分析到此为止。

    97410

    Android开源框架源码解析系列(3)——ButterKnife源码解析

    1、在Activity 类中绑定 :ButterKnife.bind(this);必须在setContentView();之后绑定;且父类bind绑定后,子类不需要再bind。...7、使用ButterKnife.bind(this,view)绑定一个view的子节点字段。如果你在子View的布局里或者自定义view的构造方法里 使用了inflate,你可以立刻调用此方法。...ButterKnife: 在Adapter的ViewHolder中使用,将ViewHolder加一个构造方法,在new ViewHolder的时候把view传递进去。...@BindView—->绑定一个view;id为一个view 变量 @BindViews —-> 绑定多个view;id为一个view的list变量 @BindArray—-> 绑定string里面array...,或者不是class文件,这些情况都抛异常 2.校验注解的元素是否是list或array 3.验证声明BindViews的类是继承自View if (viewType !

    1K30

    【JetPack】为现有 Android 项目配置视图绑定 ( ViewBinding ) 模块 ( 视图绑定不影响传统布局操作 | 视图绑定类关联 Activity | 视图绑定类本质 )

    视图绑定模块默认为全部布局生成绑定类 ; 视图绑定 ( ViewBinding ) 模块一旦启用 , 应用的全部布局都会默认自动生成一个视图绑定类 , 如果生成了视图绑定模块 , 是否对于已经使用的 findViewById...不影响之前的代码 : 此时可以不进行上面的操作 , 虽然启用了视图绑定模块 , 系统为我们生成了视图绑定类 , 这个类我们可以选择使用 , 也可以选择不用 , 也可以继续使用 setContentView...(R.layout.activity_main) 设置布局文件 , 使用 findViewById(R.id.text_view) 获取组件 ; 可以不使用系统给生成的绑定类 XxxXxxBinding...模块 , 即系统会为该布局自动生成一个视图绑定类 ; 的 TextView 组件 text_view = findViewById(R.id.text_view); text_view.setText("启用视图绑定的情况下使用传统布局操作方法

    80210
    领券