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



目录
相关文章
|
8月前
|
Java 开发者 Spring
Spring Framework 中的 @Autowired 注解:概念与使用方法
【4月更文挑战第20天】在Spring Framework中,@Autowired 注解是实现依赖注入(Dependency Injection, DI)的一种非常强大的工具。通过使用 @Autowired,开发者可以减少代码中的引用绑定,提高模块间的解耦能力
746 6
|
8月前
|
XML Java 程序员
Spring基础篇:注解编程
Spring基础篇:注解编程
|
5月前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
8月前
|
Java Spring
springboot常用的注解有哪些,如何使用
【1月更文挑战第12天】springboot常用的注解有哪些,如何使用
42 1
|
SQL XML Java
MyBatis注解基本使用
MyBatis注解是一种用于配置MyBatis映射关系和SQL操作的方式,通过在Java接口或方法上使用注解来代替XML配置,使得配置更加简洁明了。在MyBatis中,可以使用以下几个主要的注解来定义映射关系和SQL操作。
124 2
|
XML Java 数据库连接
《springboot实战》 第十章 整合Mybatis(注解)
《springboot实战》 第十章 整合Mybatis(注解)
76 0
|
SQL Java 数据库连接
MyBatis 注解的基本使用
MyBatis 注解的基本使用
|
JSON 前端开发 Java
Conditional注解与SpringBoot组件扩展
Conditional注解与SpringBoot组件扩展
193 0
|
开发框架 前端开发 Java
SpringMVC中常用注解与使用方法
SpringMVC中常用注解与使用方法
169 0
SpringMVC中常用注解与使用方法