ButterKnife8.8.1的用法

什么是ButterKnife

ButterKnife是目前常用的一种依托Java注解机制实现辅助代码生成的框架;用到了注解处理器。
它是一个专注于Android系统的View注入框架,将Android视图和回调方法绑定到成员变量和方法上;可视化一键生成;可以减少大量的findViewById以及setOnClickListener代码,是注解中相对简单易懂的开源框架 。

一句话概括:依赖注入框架,主要用于注解,减少代码。butterknife表面意思黄油刀

ButterKnife 优势:

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

使用心得:

  • 1.Activity ButterKnife.bind(this);必须在setContentView();之后,且父类bind绑定后,子类不需要再bind,Activity不需要unbind
  • 2.Fragment ButterKnife.bind(this, mRootView);
  • 3.属性布局不能用private or static 修饰,否则会报错
  • 4.setContentView()不能通过注解实现。(其他的有些注解框架可以)

使用方法

  • 导入

    导入.png
    gradle中需要进行导入
  • 一键生成资源id

    该图引依凡王子的博客: www.cnblogs.com/zhengjunfei…

    一键生成资源id.gif

英文使用说明地址:jakewharton.github.io/butterknife…

API文档地址:
jakewharton.github.io/butterknife…

GitHub源码地址:
github.com/JakeWharton…

很早出现的方法onCLick监听.png

测试效果如下

butterKnife8.8.1Framgment测试
butterKnife8.8.1绑定View测试

注意事项

  • 1)在Activity 类中绑定 :ButterKnife.bind(this);

    必须在setContentView();之后绑定;且父类bind绑定后,子类不需要再bind。

  • 2)在非Activity 类(eg:Fragment、ViewHold)中绑定:

    ButterKnife.bind(this,view);

    这里的this不能替换成getActivity()。

  • 3)activity中不需要解绑

    在Activity中不需要做解绑操作,在Fragment 中必须在onDestroyView()中做解绑操作。

  • 4)ButterKnife的修饰符

    使用ButterKnife修饰的方法和控件,不能用private or static 修饰,否则会报错。

  • 5)setContentView()不能通过注解实现。(其他的有些注解框架可以)

  • 6)对于mvc设计模式

    使用Activity为根视图绑定任意对象时,如果你使用类似MVC的设计模式你可以在Activity 调用ButterKnife.bind(this, activity),来绑定Controller。

  • 7)子View的相关绑定

    使用ButterKnife.bind(this,view)绑定一个view的子节点字段。如果你在子View的布局里或者自定义view的构造方法里 使用了inflate,你可以立刻调用此方法。或者,从XML inflate来的自定义view类型可以在onFinishInflate回调方法中使用它。

  • 8)修饰类型不能是:private 或者 static

      否则会报错:错误: @BindView fields must not be private or static. (com.ButterknifeActivity.button)复制代码

    bind资源

  • 绑定颜色

      @BindColor(android.R.color.background_dark)@ColorIntint whiteColor;复制代码
  • 绑定View

      @BindView(android.R.id.button3) View button3;复制代码
  • 绑定多个View
      @BindViews({R2.id.first_name, R2.id.middle_name, R2.id.last_name})List<EditText> nameViews;复制代码
  • 绑定String资源数组
       <string-array name="city"><item>北京市</item><item>天津市</item><item>哈尔滨市</item><item>大连市</item><item>香港市</item></string-array>@BindArray(R.array.city)protected String [] mStrings;复制代码
  • 绑定Bitmap 资源

    复制代码

事件的bind注解

  • @OnClick---->点击事件

  • @OnCheckedChanged ---->选中,取消选中

  • @OnEditorAction ---->软键盘的功能键
  • @OnFocusChange ---->焦点改变
  • @OnItemClick item---->条目被点击(
      注意这里有坑,如果item里面有Button等这些有点击    的控件事件的,需要设置这些控件属性focusable为false)复制代码
  • @OnItemLongClick item---->长按(返回真可以拦截onItemClick)
  • @OnItemSelected ---->item被选择事件
  • @OnLongClick ---->长按事件
  • @OnPageChange ---->页面改变事件
  • @OnTextChanged ---->EditText里面的文本变化事件
  • @OnTouch ---->触摸事件
  • @Optional ---->

设置多个View重点讲解

绑定多个OnCLick

  @OnClick({R.id.view_test1,R.id.btn_s01,R.id.btn_s02})public void onCLick1(View view){switch (view.getId()){case R.id.view_test1:iv_f2.setImageBitmap(rabot);break;case R.id.btn_s01:GetToast.useString(getActivity(),"按钮1");break;case R.id.btn_s02:GetToast.useString(getActivity(),"按钮2");break;}}复制代码

绑定listView的OnItemClick

    @OnItemClick(R.id.lv_List)public void OnItemClick(int index){GetToast.useString(getActivity(),"this is OnItemClick the index :"+index);}复制代码

绑定listView的OnItemLongClick

 @OnItemLongClick(R.id.lv_List)public boolean OnItemLongClick(int index){GetToast.useString(getActivity(),"this is the OnItemLongClick index :"+index);return  true;}复制代码

绑定ChexkBox的OnItemLongClick

 @OnCheckedChanged(R.id.cb_cjeck)public void OnCheckedChanged(boolean isChecked){if(isChecked){GetToast.useString(getActivity(),"选中了");return ;}GetToast.useString(getActivity(),"没选中...");}复制代码

单个绑定onClick事件

 @OnClick(R.id.f1)public void f1() {//动态添加FragmentFragmentManager manager = getSupportFragmentManager();FragmentTransaction transaction = manager.beginTransaction();Fragment1 fragment1 = new Fragment1();//transaction.add(R.id.fragment_container, fragment1);transaction.replace(R.id.fragment_container,fragment1);transaction.commit();}@OnClick( R.id.f2 )public void f2(){FragmentManager manager = getSupportFragmentManager();FragmentTransaction transaction = manager.beginTransaction();Fragment2 fragment2 = new Fragment2();transaction.replace(R.id.fragment_container,fragment2);//  transaction.add(R.id.fragment_container, fragment2);transaction.commit();}复制代码

项目地址:

github.com/androidstar…

更多文章

2017上半年技术文章集合—184篇文章分类汇总

那些年不容错过的智能刷新加载框

Android中自定义View坐标系那些事

NDK项目实战—高仿360手机助手之卸载监听

高级UI特效仿直播点赞效果—一个优美炫酷的点赞动画

Glide框架你这样玩过吗—基于Glide4.0的弱网下进度加载图片

一个实现录音和播放的小案例

相信自己,没有做不到的,只有想不到的

如果你觉得此文对您有所帮助,微信公众号:终端研发部

技术+职场

令人超赞的ButterKnife8.8.1—快捷、方面、好用!你还在等什么相关推荐

  1. 分享29个超赞的响应式Web设计

    原文自:http://www.csdn.net/article/2013-01-16/2813678-responsive-design-websites 最近几年,响应式Web设计不断印入人们眼帘, ...

  2. linux下kegg注释软件,工具篇丨GO和KEGG富集不到通路?快试试这个超赞的功能分析工具吧...

    原标题:工具篇丨GO和KEGG富集不到通路?快试试这个超赞的功能分析工具吧 i生信 专注生物分析最前沿 定期解读生信文章 提供生信分析思路和套路 方便大家短平快发SCI GO和KEGG富集分析是我们在 ...

  3. 8款超赞的最新jQuery插件工具

    jQuery是迄今为止我最喜欢的Javascript框架,开发者用jQuery创造出惊人的视觉效果,以及处理数据,等等. 在这篇文章中,我给所有web开发人员推荐8款超赞的jQuery插件工具. 1. ...

  4. 透视色轮(超赞的设计色彩研究)

    原文出处:bamagazine 译者的话:作为一名设计师,如果你还在说出"这种颜色好看,那种颜色不好看"的话时,这说明你对颜色还没有正确了解.在我们的很多文章中,都可以看到色轮的踪 ...

  5. 超赞网站推荐_字体(更多)超赞-标志性发明

    超赞网站推荐 by Pubudu Dodangoda 通过Pubudu Dodangoda 字体(更多)超赞-标志性发明 (Font (More) Awesome - an iconic invent ...

  6. 超赞的PyTorch资源大列表,GitHub标星9k+,中文版也上线了

    点击阅读原文,快速报名! 作者 | 红色石头 来源 | AI有道(ID: redstonewill) 自 2017 年 1 月 PyTorch 推出以来,其热度持续上升.PyTorch 能在短时间内被 ...

  7. 超赞的贪吃蛇、吃豆人和数字华容道等童年小游戏1行Python代码就能玩

    今天分享一个有趣的Python游戏库freegames,它包含20余款经典小游戏,像贪吃蛇.吃豆人.乒乓.数字华容道等等,依托于标准库Turtle. 我们不仅可以通过1行代码进行重温这些童年小游戏,还 ...

  8. github总star超9K!一个超赞的 PyTorch 资源大列表,有人把它翻译成了中文版!

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 转自:程序员爱码士 自 2017 年 1 月 PyTorch 推出以来,其热度持续上升 ...

  9. Github标星9k+,超赞的 PyTorch 中文资源大列表!

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 原来的英文版 GitHub 项目地址: https://github.com/bh ...

  10. Github标星9k+,超赞的 PyTorch 资源大列表!

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 原来的英文版 GitHub 项目地址: https://github.com/bh ...

最新文章

  1. 2022-2028年中国环卫行业产业链深度调研及投资前景预测报告
  2. hihoCoder#1384 : Genius ACM
  3. 人体姿态估计--Learning Feature Pyramids for Human Pose Estimation
  4. 单链表基本操作(可执行程序),二级指针使用必要性的初步理解
  5. JVM - Class常量池 || 运行时常量池
  6. 计算机二级vfp模拟考试题,计算机等级考试二级VFP模拟练习题[10]
  7. 字符串拼接数字 java_使用JAVA代码实现字符串的简单拼接
  8. IDA Plugin 编写基础
  9. 关于python测试webservice接口的视频分享
  10. Webstorm汉化方法
  11. 计算机辅助设计和制造论文,计算机辅助设计与制造CAD-CAM
  12. JAVA我的世界怎么弄TNT大陆_《我的世界》爷爷的遗言:TNT大陆地图存档
  13. matlab 数学符号输入,matlab输入数学符号
  14. Java制作银行管理系统_java代码实现银行管理系统
  15. 需要升的不是舱,是京东的价值观!
  16. Solidworks如何打开swb文件
  17. 从 Debian 10 (Buster) 升级到 Debian 11 (Bullseye)
  18. java麻将软件_dnf徽章加什么
  19. 阿哈c语言教程pdf,C++教程-完整版.pdf
  20. 55.【Java 线程】

热门文章

  1. wp-autoblog_AutoBlog简介
  2. pymysql.err.OperationalError: 1136, Column count doesn t match value count at row 1
  3. python在工作中怎么用_在Python中调用是如何工作的?
  4. IMU、INS、DGPS和POS
  5. python进程之间修改数据[Manager]与进程池[Pool]
  6. Java帮助文档的生成
  7. ApacheBench~网站性能测试工具
  8. PHP FCKeditor2.5 解决上传图片问题
  9. 关于Decorator模式
  10. Java——容器和泛型