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】