原创文章,转载请注明 http://blog.csdn.net/leejizhou/article/details/50541356
先看一段代码

public class MainActivity extends AppCompatActivity {    private Button button;    private EditText editText;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        button=(Button)findViewById(R.id.btn);        editText=(EditText)findViewById(R.id.et);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Toast.makeText(MainActivity.this,editText.getText().toString(),3000).show();            }        });    }}

作为一名Android开发者,相信你应该会对上面的代码很熟悉,如果你看不懂上面的代码,下面的也就不用继续看了,哈哈。在Android开发中findViewById和setOnClickListener可以说是非常机械化和浪费时间的代码了,相信你都快写吐了,这篇给大家介绍个ButterKnife框架,可以让你从繁琐毫无营养的代码中解脱出来,同样逻辑的代码看看用ButterKnife如何写。

public class MainActivity extends AppCompatActivity {    @Bind(R.id.et) EditText editText;    @OnClick(R.id.btn)    public void btnClick(){        Toast.makeText(MainActivity.this,editText.getText().toString(),3000).show();    }     @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);     }}

ButterKnife通过注解的方式帮你做了很多工作,代码是不是减少了很多,同时也增加了可读性,但是同样也会对没使用过的人阅读代码增加了学习成本,下面介绍下如何使用这个强大的ButterKnife。

Android Studio

  • 在Gradle中引用
 compile 'com.jakewharton:butterknife:7.0.1'
  • 或者下载Jar包
    下载地址:http://download.csdn.net/detail/leejizhou/9409535

Eclipse

  • 下载Jar包
    下载地址:http://download.csdn.net/detail/leejizhou/9409535

在Activity中使用

onCreate中加入这一行 (切记)

 ButterKnife.bind(this);

ButterKnife通过@Bind 注解传入View ID,ButterKnife就可以自动地对你布局中的View进行转换并绑定到类成员上,你再也不用写findViewById了。

 @Bind(R.id.et) EditText editText; @Bind(R.id.btn) Button button;

绑定资源到类成员上可以使用@BindBool、@BindColor、@BindDimen、@BindDrawable、@BindInt、@BindString。使用时对应的注解需要传入对应的id资源,例如@BindString你需要传入R.string.txt的字符串的资源id。

  @BindString(R.string.title) String title;  @BindDrawable(R.drawable.graphic) Drawable graphic;  @BindColor(R.color.red) int red;   @BindDimen(R.dimen.spacer) Float spacer;

View监听器的绑定,在ButterKnife注解中传入ViewID 监听器将自动配置到方法中,方法的参数都是可选的,例如下面3个都是可行的。

 @OnClick(R.id.btn)    public void btnClick(View view){        Toast.makeText(MainActivity.this,editText.getText().toString(),3000).show();    }
 @OnClick(R.id.btn)    public void btnClick(){        Toast.makeText(MainActivity.this,editText.getText().toString(),3000).show();    }
 @OnClick(R.id.btn)    public void btnClick(Button button){        button.setText("OK");    }

并且支持多ID控件绑定同一方法中

@OnClick({R.id.btn,R.id.btn2})    public void btnClick(Button button){      button.setText("ok");    }

ButterKnife不仅支持@OnClick,还支持@OnLongClick,@OnTouch等等,详细参考Javadoc http://jakewharton.github.io/butterknife/javadoc/

在非Activity中使用
Butter Knife提供了ButterKnife.bind()的几个重载,只要传入根布局,便可以在任何对象中使用注解绑定。

例如在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;  }}

在ListView的Adapter中

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);    }  }}

ButterKnife.bind()方法可以被放在任何你想使用findViewById的地方。

对于在Fragment中使用ButterKnife需要注意:Fragment与Activity生命周期不同,Fragment比Activity多个解除绑定的步骤

 @Override public void onDestroyView() {    super.onDestroyView();    ButterKnife.unbind(this);  }

ButterKnife的基本使用就介绍完了,是不是很强大,如果想更深入的了解和使用请参考Butter Knife的JavaDoc http://jakewharton.github.io/butterknife/javadoc/index.html

更多相关文章

  1. How to enable logging for apache commons HttpClient on Andro
  2. Android全屏设置
  3. android 內存等使用情況
  4. Android顶部用tabLayout和viewPager显示二级分类
  5. Android中PopupWindow的使用
  6. android中使用intent传输值
  7. 箭头函数的基础使用
  8. NPM 和webpack 的基础使用
  9. Python list sort方法的具体使用

随机推荐

  1. android一句话实现APP自动更新(带通知栏)
  2. Android(java)学习笔记117:英文朗诵android
  3. android调用市场给软件加评论
  4. android之HttpURLConnection
  5. android神器Stetho调试
  6. 【061】Eclipse 4 Android(安卓)使用技巧
  7. [转]Android设备的屏幕尺寸规格
  8. Android(安卓)MVVM结合DataBinding的简单
  9. android全局处理非捕捉异常
  10. Android中Socket通信之TCP与UDP传输原理