Butter Knife框架(小刀注解)_@BindView()用法

简介: 对于ButterKnife类官方的解释是:Field and method binding for Android views. Use this class to simplify finding views and attaching listeners by binding them with annotations.翻译过来就是:Android视图的字段和方法绑定。使用此类通过将视图与注释绑定来简化查找视图和附加侦听器。

对于ButterKnife类官方的解释是:


Field and method binding for Android views. Use this class to simplify finding views and attaching listeners by binding them with annotations.


翻译过来就是:


Android视图的字段和方法绑定。使用此类通过将视图与注释绑定来简化查找视图和附加侦听器。



原生的获取组件是这样的:


public class MainActivity extends AppCompatActivity {
    //定义组件
    private TextView main_tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        main_tv = findViewById(R.id.main_tv);//获取组件
        main_tv.setText("111");//使用组件
    }
}


而使用 Butter Knife后的获取组件是这样子的:

public class MainActivity extends AppCompatActivity {
    @BindView(R.id.main_tv)  
    private TextView main_tv;//定义并获取组件
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);   //绑定activity
        main_tv.setText("111");//使用组件
    }
}


Butter Knife(小刀注解) 优点:


1、View绑定和Click事件处理功能,简化代码


2、方便处理Adapter里的ViewHolder绑定问题


3、运行时不会影响APP效率,使用配置方便


而今天遇到了一个在UI控件的上方使用该注解的情况。


注解的控件变量必须是public,否则报错。

@BindView(R.id.tracking_locus_btn)
    ImageButton mLocusBtn;


那这个注解有什么用呢?


代替了findViewById方法。也就是说你不用再去每个控件都去find一遍了。


点开这个注解你会发现~

import android.support.annotation.IdRes;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.CLASS;
/**
 * Bind a field to the view for the specified ID. The view will automatically be cast to the field
 * type.
 * <pre><code>
 * {@literal @}BindView(R.id.title) TextView title;
 * </code></pre>
 */
@Retention(CLASS) @Target(FIELD)
public @interface BindView {
  /** View ID to which the field will be bound. */
  @IdRes int value();
}


然后再创建一个注解处理器,当然只求会用的话,下面这个你也可以不看。

package com.example.zhujie;
import android.app.Activity;
import android.view.View;
import java.lang.reflect.Field;
//创建注解处理器
public class InjectUtils {
    public static void inject(Activity activity) throws IllegalAccessException {
        Field[] fields = activity.getClass().getDeclaredFields();
        for (Field field : fields) {
            BindView bindView = field.getAnnotation(BindView.class);
            if (bindView != null) {
                int value = bindView.value();
                View view = activity.findViewById(value);
                try {
                    field.set(activity, view);
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}


ButterKnife.bind(this);

参数就是传入当前页面的Activity。

然后使用set方法调整UI控件即可。


但是!

你如果在java代码中绑定了一个控件

但是你却没有使用,界面就会崩溃。



还有!

如果你在onClick方法想要用点击事件,那么也要在onClick方法上面加一个注解,注解的内容就是控件的ID。

 @OnClick({R.id.tracking_car_btn, R.id.tracking_mobile_btn})
    public void onClick(View v) {}


这个大佬写的很不错


http://t.csdn.cn/JkHG9



目录
相关文章
|
6月前
|
Java 开发者 Spring
Spring Framework 中的 @Autowired 注解:概念与使用方法
【4月更文挑战第20天】在Spring Framework中,@Autowired 注解是实现依赖注入(Dependency Injection, DI)的一种非常强大的工具。通过使用 @Autowired,开发者可以减少代码中的引用绑定,提高模块间的解耦能力
626 6
|
6月前
|
Java 应用服务中间件 Spring
【Spring Boot 源码学习】@Conditional 条件注解
【1月更文挑战第8天】本篇介绍 @Conditional 条件注解及其衍生注解
184 3
【Spring Boot 源码学习】@Conditional 条件注解
|
3月前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
23天前
|
XML Java 数据格式
手动开发-简单的Spring基于注解配置的程序--源码解析
手动开发-简单的Spring基于注解配置的程序--源码解析
38 0
|
5月前
|
前端开发 Java 开发者
深入理解 Spring Boot 注解:核心功能与高级用法详解
深入理解 Spring Boot 注解:核心功能与高级用法详解
280 1
|
5月前
|
Java Spring 容器
Spring5系列学习文章分享---第六篇(框架新功能系列+整合日志+ @Nullable注解 + JUnit5整合)
Spring5系列学习文章分享---第六篇(框架新功能系列+整合日志+ @Nullable注解 + JUnit5整合)
37 0
|
Java API 文件存储
Spring很常用的@Conditional注解的使用场景和源码解析
今天要分享的是Spring的注解@Conditional,@Conditional是一个条件注解,它的作用是判断Bean是否满足条件,如果满足条件,则将Bean注册进IOC中,如果不满足条件,则不进行注册,这个注解在SpringBoot中衍生出很多注解,比如@ConditionalOnProperty,@ConditionalOnBean,@ConditionalOnClass等等,在SpringBoot中,这些注解用得很多。
139 0
|
前端开发 Java Spring
Spring Boot 中的 @Controller 注解:原理、用法与示例
Spring Boot 中的 @Controller 注解:原理、用法与示例
|
JSON 前端开发 Java
Conditional注解与SpringBoot组件扩展
Conditional注解与SpringBoot组件扩展
173 0
|
缓存 Java Spring
Spring 框架中的 @Enable* 注解是怎样实现的?
概述 Spring 的项目中,我们经常会使用 @Enable 开头的注解到配置类中,添加了这种注解之后,便会开启一些功能特性。常用的注解如 @EnableWebMvc、@EnableTransactionManagement、@EnableAsync、@EnableScheduling 等等。
166 0