[轉]Android Libraries 介紹 - Butter knife

原文地址

Butter Knife 簡介

Butter Knife - Field and method binding for Android views。助你簡化程式碼,方便閱讀。

使用方法

開發 andriod app 的時候,一定有寫過類似的 code:

      class ExampleActivity extends Activity {
        TextView title;
        TextView subtitle;
        TextView footer;

        @Override public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.simple_activity);

           title = (TextView)findViewById(R.id.title);
           subtitle = (TextView)findViewById(R.id.subtitle);
           footer = (TextView)findViewById(R.id.footer);

           //other codes

        }}

當一個 activity 有很多個 view 的話,便會發覺這些 findViewById() 的 code 變得很長很煩很長很煩很長很煩。

用了 Butter Kinfe ,便可以簡化成

      class ExampleActivity extends Activity {
        @Bind(R.id.title) TextView title;
        @Bind(R.id.subtitle) TextView subtitle;
        @Bind(R.id.footer) TextView footer;

        @Override public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.simple_activity);
           ButterKnife.bind(this);

           // other codes
        }}

用 @Bind 加上 ButterKnife.bind() 自動指定對應的 view。是不是簡潔了很多?

Fragment 也可使用:

      public class FancyFragment extends Fragment {
        @Bind(R.id.button1) Button button1;
        @Bind(R.id.button2) Button button2;

        @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
           View view = inflater.inflate(R.layout.fancy_fragment, container, false);
           ButterKnife.bind(this, view);

           // TODO Use fields...
           return view;
        }
      }

Adapter 中的 ViewHolder 也沒問題:

      public class MyAdapter extends BaseAdapter {
        @Override public View getView(int position, View view, ViewGroup parent) {
           ViewHolder holder;
           if (view != null) {
             holder = (ViewHolder) view.getTag();
           } else {
             view = inflater.inflate(R.layout.whatever, parent, false);
             holder = new ViewHolder(view);
             view.setTag(holder);
           }

           holder.name.setText("John Doe");
           // etc...

           return view;
        }

        static class ViewHolder {
           @Bind(R.id.title) TextView name;
           @Bind(R.id.job_title) TextView jobTitle;

           public ViewHolder(View view) {
             ButterKnife.bind(this, view);
           }
        }
      }

另外可以將幾個 TextView 放在 List 中:

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

也可以用來取代 OnClickListener

      @OnClick(R.id.submit)
      public void submit(View view) {
        // TODO submit data to server...
      }

幾個 Button 當然可以用同一 method 啦

      @OnClick({ R.id.door1, R.id.door2, R.id.door3 })
      public void submit(View view) {
        // TODO submit data to server...
      }

安裝方法

到官網直接下載 jar 或者用 gradle

      compile ‘com.jakewharton:butterknife:7.0.1‘

      lintOptions {
        disable ‘InvalidPackage‘
      }

用 IntelliJ IDEA 的朋友可能要到 Setting > Annotation Processors 設定使用 Butter Knife。

如有使用 proguard,記得要加

      -keep class butterknife.** { *; }
      -dontwarn butterknife.internal.**
      -keep class **$$ViewBinder { *; }

      -keepclasseswithmembernames class * {
           @butterknife.* <fields>;
      }

      -keepclasseswithmembernames class * {
           @butterknife.* <methods>;
      }

好處

令 code 精簡,這一點已經足夠了。阿們。

總結

Butter Knife 看似作用不大,實際上不使用它也不會有大影響。但是一用上它便會愛上它的簡潔和方便,現在每個 project 也有使用。它是屬於那種「不用不會有問題,但一用便令人上癮」的類別的 libraries。

連結

时间: 2024-11-05 23:34:10

[轉]Android Libraries 介紹 - Butter knife的相关文章

android注解[Jake Wharton Butter Knife]

Introduction Annotate fields with @InjectView and a view ID for Butter Knife to find and automatically cast the corresponding view in your layout. class ExampleActivity extends Activity { @InjectView(R.id.title) TextView title; @InjectView(R.id.subti

Android RoboGuice开源框架、Butter Knife开源框架浅析

Google Guice on Android(RoboGuice) 今天介绍一下Google的这个开源框架RoboGuice, 它的作用跟之前讲过的Dagger框架差点儿是一样的,仅仅是Dagger比它的功能更强大一些. Dagger通过专注于一种简化的功能集以一种不同的方式达到了更好的性能.有人觉得RoboGuice节约了大量的时间.较少的代码意味着较少的错误.较少的样板代码意味着能够把很多其它的时间放到应用的核心逻辑上.所以这就是为什么我们要使用这些开源框架来开发的原因. 以下我们来说说R

Butter Knife的使用(仅限Android Studio)

四月,五月是比之前忙了很多,明白了很多,也改变来了很多,今天依旧在被迫加班,手头的工作都做的差不多了,想想已经很久没有学习过新的知识了.人懒又笨,但是也不想辜负朋友的一番好意,Butter Knife就是朋友介绍的比较好用的类库.今天用了一下还是很好用虽然和XUtils的注解很相识,但是呢如果项目中的网络请求没有使用XUtils,就可以使用它了,想说它的使用方法真的很简单,一切了解一下吧. 配置: 用gradle配置的时候加入: compile 'com.jakewharton:butterkn

Linux Kernel 排程機制介紹

http://loda.hala01.com/2011/12/linux-kernel-%E6%8E%92%E7%A8%8B%E6%A9%9F%E5%88%B6%E4%BB%8B%E7%B4%B9/ Linux Kernel 排程機制介紹 Linux Kernel 排程機制介紹 [email protected] by loda. 2011/12/2 多核心架構儼然是目前智慧型手機方案的新趨勢,隨著省電與效能上的考量,多核心的架構各家方案也都有所差異.為能讓同一個Linux Kernel在不同效

GitHub Android Libraries Top 100 简介

GitHub Android Libraries Top 100 简介 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不相关的项目, 所以排名并不具备任何官方效力, 仅供参考学习, 方便初学者快速了解当前一些流行的 Android 开源库. 项目名称 项目简介 1. react-native 这个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开源框架 Rea

PCB成型製程介紹

PCB成型製程在電子構裝中所扮演的角色 下圖是電腦主機的內部組成 我們將以插在主機板上的一片 USB擴充卡來說明PCB成型製 程在電子構裝中所扮演的角色 PCB成型製程的子製程 USB擴充卡要插入主機板上的插槽進行電子訊號的聯結.為了降低板子 插入時的阻力,會在板子的邊緣做出一斜面(如圖所示),要做出這個斜邊, 就要靠斜邊製程. 斜邊製程 要在板邊做出斜邊,主要是以端銑刀對板子邊緣進行旋轉切削. 斜邊製程品質異常範例 斜邊深度大時,會使用二支Spindle作兩段式作業,但二支Spindle的角度

Butter Knife使用详解

转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6610529.html Butter Knife Github地址: https://github.com/JakeWharton/butterknife 官方说明给出的解释是 Bind Android views and callbacks to fields and methods. Field and method binding for Android views which uses annot

【Butter Knife】依赖注入方式简化代码提高开发效率

Butter Knife是一款非常不错的开源框架,其目的是简化代码,提高项目的开发效率. 以往的开发我们经常需要用findViewById(R.xx.xxx);几乎没个页面都会涉及到,无论Activity还是Fragment甚至listView.GridView中的 Adapter.这些重复性的代码会让人觉得很枯燥,因为闭上眼都不会敲错的代码,每天重复几百遍是有点耗时,尽管有代码提示.而且可能会因为不同field的忘记书写而导致NullPoint空指针. 那么还是直接进入主题: 步骤: 第三方框

Butter Knife:一个安卓视图注入框架

2014年5月8日 星期四 14:52 官网: http://jakewharton.github.io/butterknife/ GitHub地址: https://github.com/JakeWharton/butterknife JavaDocs地址: http://jakewharton.github.io/butterknife/javadoc/ 注:本随笔翻译自官网,做了一些整理和注释.来自我的OneNote笔记 大纲: @InjectView (Activity,Fragment