ButterKnife系列之简单使用和原理分析

ButterKnife的优势

  • 强大的View绑定和Click事 件处理功能,简化代码,提升开发效率
  • 方便的 处理Adapter里的ViewHolder绑定问题
  • 运行时不 会影响APP效率,使用配置方便
  • 代码清晰,可读性强

ButterKnife与IoC的对比

  • 共同特点:同样实现了解耦的目的
  • 核心技术:运行时通过反射技术(reflect)VS注解处理器技术(APT)
  • 开发使用:两者几乎- -样,傻傻分不清楚
  • 代码难易: loc编程 更具挑战性
  • 程序稳定:两者暂未发现致命的缺陷
  • 两者缺陷: reflect会消耗一定性能, APT会增加apk大小
  • 开发追求:更偏向编译期的APT技术

简单使用

增加gradle依赖

    // 依赖库
//    implementation 'com.jakewharton:butterknife:9.0.0-rc1'
    // 注解处理器
//    annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0-rc1'

在MainActivity中使用

    @BindView(R.id.tv)
    TextView tv;
    
	 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ButterKnife.bind(this);
    }

    @OnClick(R.id.tv)
    public void click(View view) {
        Toast.makeText(this, tv.getText().toString(), Toast.LENGTH_SHORT).show();
    }

原理分析

ButterKnife.bind(this);会找到APT生成的类文件MainActivity_ViewBinder.java,并且创建这个类的对象。

public class MainActivity_ViewBinder implements ViewBinder<MainActivity> {

    @Override
    public void bind(final MainActivity target) {
        target.tv = target.findViewById(R.id.tv);
        target.findViewById(R.id.tv).setOnClickListener(new DebouncingOnClickListener() {

            @Override
            public void doClick(View v) {
                target.click(v);
            }
        });
    }
}

在构造方法中, 就初始化了tv这个变量,而且给tv增加了点击事件。 这个MainActivity_ViewBinder类是在编译的时候,通过解析@BindView这个注解自动生成的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值