Butter Knife注解框架的精细点滴

Butter Knife这个框架实际上很多人很早就会了,或者说听说了,这里我就不再多赘述了,只是来教一下大家如何去快速上手和使用

一.配置

我们在项目app/build.gradle中添加依赖

implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
1
2

二.绑定

要想使用,就必须绑定,这里介绍几种常见的场景

  • 1.Activity
  • 2.Fragment
  • 3.Adapter

在Activity中每次使用都需要bind,所以,我们来写一个基类

public class BaseBindActivity extends AppCompatActivity {
 @Override
 public void setContentView(View view) {
 super.setContentView(view);
 ButterKnife.bind(this);
 }
 @Override
 public void setContentView(int layoutResID) {
 super.setContentView(layoutResID);
 ButterKnife.bind(this);
 }
 @Override
 public void setContentView(View view, ViewGroup.LayoutParams params) {
 super.setContentView(view, params);
 ButterKnife.bind(this);
 }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

这里可以看出,我是重写了setContentView来使用bind,这是因为bind方法一定要在setContentView之后使用

而在Fragment中,我们先来看一份代码

public class TestFragment extends Fragment {
 private Unbinder mUnbinder;
 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
 View view = inflater.inflate(R.layout.fragment_test,null);
 mUnbinder = ButterKnife.bind(this,view);
 return view;
 }
 @Override
 public void onDestroyView() {
 super.onDestroyView();
 mUnbinder.unbind();
 }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

因为Fragment的特殊性,所以需要解绑,在bind的时候回返回一个Unbinder对象,通过他,在onDestroyView中解绑即可

如果是adapter中

class ViewHolder {
 public ViewHolder(View view) {
 ButterKnife.bind(this,view);
 }
 }
1
2
3
4
5
6
7

三.使用

public class MainActivity extends BaseBindActivity {
 //findViewById
 @BindView(R.id.mTextView)
 TextView mTextView;
 @BindView(R.id.mButton)
 Button mButton;
 @BindString(R.string.app_name)
 String mString;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 mTextView.setText(mString);
 }
 //OnClickListener
 @OnClick(R.id.mButton)
 public void clickButton(){
 mTextView.setText("onclick");
 }
 //OnLongClickListener
 @OnLongClick(R.id.mButton)
 public boolean longClickButton(){
 mTextView.setText("long click");
 return true;
 }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

我这里只是列举一些常用的,比如BindView,就是findViewById,还有点击事件等,这些可以翻阅资料所得

四.插件

一件生成的插件【Android ButterKnife Zelezny】

Butter Knife注解框架的精细点滴