前面四篇是自己参考有关知识和分析ButterKnife源码后写的,如果有不对的地方,还望指导下。

这一篇是实践篇。我们的目的是学会原理来变为自己的知识。
这个demo所使用的原理就是ButterKnife的原理

支持的注解

实现BindView,OnClick(多id),BindLayout
BindLayout注解为:

@Retention(RetentionPolicy.CLASS)
@Target(ElementType.TYPE)
public @interface BindLayout {int value();
}
  1. BindView实现对成员变量控件的注解
  2. OnClick实现对方法控件的注解
  3. BindLayout实现对activity的布局的注解,你可以自行扩展,demo只支持activity
    使用后为
@BindLayout(R.layout.activity_main)
public class MainActivity extends AppCompatActivity {@BindView(R.id.tv)TextView mTextView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_main);ViewInjector.inject(this);mTextView.setText("11111111");}@OnClick({R.id.id_btn0, R.id.id_btn1})public void ok() {Toast.makeText(this, "ok", Toast.LENGTH_SHORT).show();}@OnClick(R.id.id_btn2)public void goList() {startActivity(new Intent(this, MainActivityList.class));}}

最后生成的的代码为:

public class MainActivity$$Injector implements Injector<MainActivity> {@Overridepublic void inject(final MainActivity host, Object source, Finder finder) {host.setContentView(2130968602);host.mTextView= (TextView)(finder.findView(source,2131427412));View.OnClickListener listener;listener = new View.OnClickListener() {@Overridepublic void onClick(View view) {host.ok();}} ;finder.findView(source, 2131427413).setOnClickListener(listener);finder.findView(source, 2131427414).setOnClickListener(listener);listener = new View.OnClickListener() {@Overridepublic void onClick(View view) {host.goList();}} ;finder.findView(source, 2131427415).setOnClickListener(listener);}
}

效果图为

尾声

如果你仔细阅读了上面的4篇文章,知道了原理,对于理解这个demo应该不难。
最后附上下载地址:

https://github.com/ta893115871/BindView

深入理解ButterKnife源码并掌握原理(五)相关推荐

  1. 深入理解ButterKnife源码并掌握原理(四)

    到此我们整个的流程算分析完了. 最后我们看下对外提供的API bind 方法 那么还差一步,什么时候都要我们生成的java文件呢?答案是: ButterKnife.bind(this);方法. 我们看 ...

  2. 深入理解ButterKnife源码并掌握原理(三)

    上两篇我们分析完了处理器的process方法的findAndParseTargets方法来获取了一个集合,该集合包含了你使用注解的类的TypeElement和这个类中的注解的实例BindingClas ...

  3. 深入理解ButterKnife源码并掌握原理(二)

    好,我们接着parseBindView的步骤3 ,忘记了在哪里了,咦. 可以看下上一篇,哈哈. 步骤3 BindingClass bindingClass = targetClassMap.get(e ...

  4. 深入理解ButterKnife源码并掌握原理(一)

    前言 话说在android这座大山里,有一座庙(方块公司-square),庙里住着一个神-jake(我是这么叫的嘻嘻). 不要小看这个小jake,这个神可是为android应用开发们提供了强有力的帮助 ...

  5. MyBatis 源码分析 - 缓存原理

    1.简介 在 Web 应用中,缓存是必不可少的组件.通常我们都会用 Redis 或 memcached 等缓存中间件,拦截大量奔向数据库的请求,减轻数据库压力.作为一个重要的组件,MyBatis 自然 ...

  6. Tomcat7.0源码分析——请求原理分析(上)

    前言 谈起Tomcat的诞生,最早可以追溯到1995年.近20年来,Tomcat始终是使用最广泛的Web服务器,由于其使用Java语言开发,所以广为Java程序员所熟悉.很多早期的J2EE项目,由程序 ...

  7. 【赠书福利】掘金爆火小册同名《Spring Boot源码解读与原理剖析》正式出书了!...

    关注我们丨文末赠书 承载着作者的厚望,掘金爆火小册同名读物<Spring Boot源码解读与原理剖析>正式出书! 本书前身是掘金社区销量TOP的小册--<Spring Boot源码解 ...

  8. 遍历HashMap源码——红黑树原理、HashMap红黑树实现与反树型化(三)

    本章将是HashMap源码的最后一章,将介绍红黑树及其实现,HashMap的remove方法与反树型化.长文预警~~ 遍历HashMap源码--红黑树原理.HashMap红黑树实现与反树型化 什么是红 ...

  9. Java基础笔记(2)——HashMap的源码,实现原理,底层结构是怎么样的

    Java基础笔记(2)--HashMap的源码,实现原理,底层结构是怎么样的 HashMap的源码,实现原理,底层结构 1.HashMap: HashMap是基于哈希表的 Map 接口的实现.此实现提 ...

最新文章

  1. Ubuntu14.04 64位上配置终端显示git分支名称
  2. 【bzoj2754】【scoi2012】喵星球上的点名
  3. 聊天秒回的人都是生命之光 诉言网
  4. TensorFlow随笔-多分类单层神经网络softmax
  5. mysql性能测试工具msyqlslap_MySQL性能测试工具 mysqlslap
  6. Connection to node -1 (Desktop/192.168.0.102:9091) could not be established.
  7. 正则匹配问号_爬虫之正则表达式
  8. vue value key
  9. 【OpenCV】OpenCV实战从入门到精通之 -- 显示创建Mat对象的七种方法
  10. ECMAScript 的部署进度
  11. 【idea基础知识】常用快捷键整理
  12. iphone通知和android,手机App 通知数量太多,让你备感压力吗?教你如何消除令人心烦的信息通知(iPhone、Android)...
  13. laravel基本信息
  14. 前端数据可视化echarts.js使用指南
  15. 数字信号处理笔记02:离散时间傅里叶变换(DTFT)
  16. 详述 Redis 选择单线程模型的原因以及 I/O 多路复用
  17. 伊甸园日历游戏 c语言,HDU2149-Good Luck in CET-4 Everybody!(博弈,打表找规律)
  18. C语言递归函数求n!的两种写法---详细讲解
  19. 百度世界大会全新打开方式!VR会场“希壤”上线
  20. VMware提示“指定的文件不是虚拟磁盘“或“The file specified is not a virtual disk”打不开

热门文章

  1. [转]mysql下如何执行sql脚本
  2. jQuery源码解析之on事件绑定
  3. python linux 下开发环境搭建
  4. 云平台圈地须群攻莫单打
  5. Haproxy配置http模式负载均衡
  6. 关于我小孩的教育意见
  7. XML Schema帮你建模
  8. 【Golang】关于从切片中删除某个元素时会覆盖底层数组的说明
  9. CenterNet :Objects as Points 详解
  10. php preview,preview.php