有没有被重复而又繁琐的findViewById()和各种点击事件所困扰,这些代码明显显得过于冗余和繁琐,有没有什么好的办法避免它们呢?答案是肯定的,这就是这里要介绍的ButterKnife,从名字上来,它的确是一把好刀。
要使用它们还是很方便的,直接在gradle里加入dependency就好了。
官方的使用如下(如果是老版本的会是@injectView):
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);//初始化
// TODO Use fields...
}
@Override public void onDestroyView() { super.onDestroyView(); ButterKnife.unbind(this); }}
这样就可以代替findViewById来初始化各种控件了。
当然你要同时声明多个时可以如下操作:
@Bind({ R.id.first_name, R.id.middle_name, R.id.last_name }) List<EditText> nameViews;
控件的点击监听也可以注入
@OnClick(R.id.submit) public void submit() { // TODO submit data to server... }
@OnClick(R.id.submit) public void sayHi(Button button) { button.setText("Hello!"); }
当然不止这些用法了,详细的看官网吧 http://jakewharton.github.io/butterknife/
对了最后在介绍个配套的plugins:Android Butterknife Zelezny 有了它就可以自动添加@Bind了