Android Studio 插件 —— ButterKnife注解式开发

先看一段代码


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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值