文档章节

ButterKnife -- 解决控件的重复findViewById

 程序小猴
发布于 2016/04/04 10:32
字数 690
阅读 20
收藏 0

推荐一个Android开发懒人库 -- ButterKnife

ButterKnife

  -- 项目地址:https://github.com/JakeWharton/butterknife

都说程序员都是比较懒的,什么事情都想着让程序自动化帮忙减轻工作量,这个开源库可以让我们从大量的findViewById()和 setonclicktListener()解放出来,其对性能的影响微乎其微(查看过Butter Knife的源码,其自定义注解的实现都是限定为RetentionPolicy.CLASS,也就是到编译出.class文件为止有效,在运行时不额外 消耗性能,其是通过java注解自动生成java代码的形式来完成工作),其也有一个明显的缺点,那就是代码的可读性差一些,但了解了之后,上手也很 快。。。

 

解放控件对象实例化

也就是 findViewById(),一直以来的做法都是一个个定义,然后在 setContentView() 或 inflate() 之后一一来findViewById()进行实例化,而使用 ButterKnife,你只需要在代码中 使用注解方式进行对象申明,然后在 setContentView() 或 inflate() 之后调用一句话,那么申明的所有对象自动创建出来。

复制代码

 1     @InjectView(R.id.ok_btn) //控件对应的ID 2     Button mBtn; 3  4     @InjectView(R.id.title_text) 5     TextView mTitleTextView; 6  7     @Override 8     protected void onCreate(Bundle savedInstanceState) { 9         super.onCreate(savedInstanceState);10         setContentView(R.layout.main_activity);11 12         ButterKnife.inject(this);13 14         //这样之后就可以直接使用变量了15         mTitleTextView.setText("test");16 17     }

复制代码

 

是不是很神奇!!!

Fragment的和adapter里也可以用,不过调用时要多加一个root view参数。

Fragegment使用时记得同时继承onDestroyView,并在其中将ButterKnife.reset

 

复制代码

 1 public class FancyFragment extends Fragment { 2   @InjectView(R.id.button1) Button button1; 3   @InjectView(R.id.button2) Button button2; 4  5   @Override View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 6     View view = inflater.inflate(R.layout.fancy_fragment, container, false); 7     ButterKnife.inject(this, view); 8     // TODO Use "injected" views... 9     return view;10   }11 }12 13   @Override void onDestroyView() {14     super.onDestroyView();15     ButterKnife.reset(this);16   }

复制代码

 

还可以实例化控件数组,注解多一个s,也就是 InjectViews

1 @InjectViews({ R.id.first_name, R.id.middle_name, R.id.last_name }) List<EditText> nameViews;

 

解放监听添加

如下,可以直接为 R.id.submit这个控件添加OnClickListener为submit函数,流弊啊。。。

1 @OnClick(R.id.submit)2 public void submit() {3   // TODO submit data to server...4 }

还可以批量为多个控件添加为同一个响应函数:

复制代码

1 @OnClick({ R.id.door1, R.id.door2, R.id.door3 })2   public void pickDoor(DoorView door) {3    if (door.hasPrizeBehind()) {4         Toast.makeText(this, "You win!", LENGTH_SHORT).show();5    } else {6        Toast.makeText(this, "Try again", LENGTH_SHORT).show();7    }8   }

复制代码

 

具体的可以去看该大神的项目页面。在文前已给出。

注:最新版的库已经将方法名改了,当然也是兼容上面所列的例子的。最新示例如下:

复制代码

 1 class ExampleActivity extends Activity { 2   @FindView(R.id.user) EditText username; 3   @FindView(R.id.pass) EditText password; 4  5   @OnClick(R.id.submit) void submit() { 6     // TODO call server... 7   } 8  9   @Override public void onCreate(Bundle savedInstanceState) {10     super.onCreate(savedInstanceState);11     setContentView(R.layout.simple_activity);12     ButterKnife.bind(this);13     // TODO Use fields...14   }15 }

复制代码


本文转载自:http://www.cnblogs.com/flyme/p/4517560.html

粉丝 0
博文 8
码字总数 1105
作品 0
厦门
私信 提问
Android注解神器 ButterKnife框架

前言: 本人是一个只有几个月工作经验的码小渣。这是我写的第一篇博客,如有不足之处还请大家不要介意,还请大佬可以指出问题。 在这几个月的实战开发中自己也遇到了很多问题,真的是举步艰难...

码小渣
2018/11/03
0
0
ButterKnife 牛油刀使用

一、butterknife介绍   ①官网 butterknife        ②Field and method binding for Android Views which uses annotation processing to generate boilerplate code for you   【......

小群子0618
2018/09/14
0
0
Android Butterknife(黄油刀) 使用方法总结

前言: ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象,有了ButterKnife可以很轻松的省去这些步骤。是大神JakeWharton的力作,目前使用很广...

技术小能手
2018/08/24
0
0
ButterKnife注解框架详解

  Android 懒人注解框架 :https://github.com/JakeWharton/butterknife   前言:     注解,相信很多同学都用到了,对控件进行初始化的时候需要用到 findViewById() ,当一个activit...

听着music睡
2017/04/12
0
0
ButterKnife源码解析

ButterKnife(https://github.com/JakeWharton/butterknife)是一款android平台的依赖注入框架,通过该工具可以实现View、OnClickListener的注入,省去了findViewById、setOnClickListener的...

JasmineBen
2018/05/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周二乱弹 —— 开发语言和语言开发的能一样么

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌:#今日歌曲推荐# 分享The Score的单曲《Revolution》 《Revolution》- The Score 手机党少年们想听歌,请使劲儿戳(这里) @批判派...

小小编辑
今天
1K
16
oracle ORA-39700: database must be opened with UPGRADE option

ORA-01092: ORACLE instance terminated. Disconnection forced ORA-00704: bootstrap process failure ORA-39700: database must be opened with UPGRADE option 进程 ID: 3650 会话 ID: 29......

Tank_shu
今天
3
0
分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0
聊聊DubboDefaultPropertiesEnvironmentPostProcessor

序 本文主要研究一下DubboDefaultPropertiesEnvironmentPostProcessor DubboDefaultPropertiesEnvironmentPostProcessor dubbo-spring-boot-project-2.7.3/dubbo-spring-boot-compatible/au......

go4it
昨天
2
0
redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部