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

ButterKnife

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

都说程序员都是比较懒的,什么事情都想着让程序自动化帮忙减轻工作量,这个开源库可以让我们从大量的findViewById()和setonclicktListener()解放出来。

解放控件对象实例化

也就是 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 }
时间: 2024-11-09 02:59:28

推荐一个Android开发懒人库 -- ButterKnife的相关文章

谷歌推荐的Android图片加载库(Glide)介绍

本文出自:http://blog.csdn.net/u011733020 原      文:https://inthecheesefactory.com/blog/get-to-know-glide-recommended-by-google/en 在过去的谷歌开发者峰会,谷歌给我们介绍了一个图片加载库,bumptech开发的一个名字叫Glide 的Android图像加载库.它已被用于许多谷歌开源项目,到现在为止,包括谷歌I / O 2014官方应用.它成功地使我感兴趣.我花了一整晚的时间和它玩

学Android开发的人可以去的几个网站

1.<IT蓝豹>Android开源项目分享平台 国内非常好的一个Android开发者分享站,分享android所有特效,每天都有最新的Android开源项目推荐,版块划分完全面向开发者,非常方便, 适合初学者和高手进阶的好地方,网站的水平也非常高,也有很多android源码项目可以下载,经常会出一些最新技术教程. 地址:http://www.itlanbao.com 2. helloAndroid 以教程为最大特色的国外网站对大家系统学习Android知识非常有帮助, 地址:http://ww

[付费视频]Delphi视频Android开发使用静态库(A)和动态库(SO)

关于本视频:前阵子接到一个委托,解决Delphi开发Android程序中串口通信的问题,厂家那边提供了c文件,需要翻译成delphi可用,翻译倒是比较简单.不过后来翻译读写ic卡单元的时候进行不下去了,delphi还提供的不太完整,而且底层提供的也有些bug,然后就有了直接使用.a和.so文件的想法,后来花不少精力,查阅资料和调试,终于调通了.特意录制本视频希望能为大家解决一些实际问题.顺便赚点零花钱. 视频录制过程间隔时间比较长,拼接起来的,观看过程中会有一些停顿现象.还有普通话太烂,请大家一

强烈鄙视那些:自己完全不用android手机,却在做android开发的人

前言: 最近参加android技术交流会,看到几个同时用mac和iphone的人,以为他们是全栈工程师(android和ios都会) , 谁知道交流下来,居然只是做android开发的,ios根本不会. 而且问他们平时用什么手机,回答都是:iphone. 还带着鄙视的语气说:android都是屌丝用的,不好用.心里顿时一万个草泥马:你tmd 既然这么鄙视 ,你为什么还做android开发,还靠android找工作. 为什么不去做ios开发??? 这种人,肯定水平不咋地. 只会装B 和 吹牛逼.因

推荐一个Android Studio很使用的插件android-butterknife-zelezny

当你按钮很多,你又懒得写代码,虽然通过重写onClick比较方便,那么我们能不能连这个switch都省略掉呢? 答案是肯定的,下面这个插件就帮我们解决了这个问题! Android-butterknife-zelezny 是根据butterknife定制的一款插件,能够方便快速初始化 简单来说,当你的布局中有多个按钮时候,这个插件能够快速帮你创建好onClick代码 1,首先,插件的地址  https://github.com/dongjunkun/butterknife-plugin/blob/

50一个Android开发技巧(01 利用好layout_weight属性)

问题:如何将一个Button放置在布局的中间,并设置其宽度parent的50%? 分析:问题想要达到的效果应该是这样: (原文地址:http://blog.csdn.net/vector_yi/article/details/24397733) 这看起来不难,但非常多开发人员并不知道达到这样效果的最佳方法. 解决:在此我们将weightSum属性与layout_weight属性一起利用. <LinearLayout xmlns:android = "http://schemas.andro

解决一个 Android开发自定义控件问题,无法读取属性值

今天玩了一下Android自定义控件,是一个TextView和ImageButton的组合控件,所有的都写好了,但是运行得不到想要的结果,找了大半天找不到错误,代码如下: 1.工程目录结构 2.imagebtn_with_text.xml <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res

Android 开发:开源库Speex支持arm64的动态库文件

随着处理器制造工艺的不断进步,和Android系统的不断发展,最近出了arm64-v8a的架构,由于项目中用到了speex的第三方语音编解码的动态库,其他架构的处理器暂不用说,一切正常,唯独到arm64-v8a这里出问题了,在Android5.0 arm64位的手机上使用语音会报错,关于其他架构的.so文件编译不再赘述,网上都有资料.废话少说,直接上步骤: 1.下载android-ndk-r10e-windows-x86_64并解压,这个支持arm64 -v8a的编译,之前的版本都不行,我之前用

iOS 推荐一个下载用的第三方库

AFNetworking有下载功能,但是下载功能比较基本,要实现复杂下载功能需要自己写一些代码.今天在github上找到了一个下载功能的开源项目,非常不错,链接如下:https://github.com/thibaultCha/TCBlobDownload. 无论是AFNetworking还是我提到的这个库,都利用了NSOperation,还利用了一个关键的函数NSURLConnection的 scheduleInRunLoop,这个函数的解释如下 Determines the run loop