Butter Knife介绍
Butter Knife 是Android系统的View注入框架(依赖注入),通过注解(Annotation)绑定Android中View的属性和方法,减少findViewById(),setOnClickListener()的使用。
GitHub地址:https://github.com/JakeWharton/butterknife
Butter Knife优点
- 简化代码,提升开发效率(强大的View绑定和Click事件处理功能)
- 方便处理Adapter里的ViewHolder绑定问题
- 代码清晰,可读性强,配置简单
Butter Knife的使用
安装Android ButterKnife Zelezny 插件
打开Android Studio—>Settings—>Plugins—>搜索Android ButterKnife Zelezny,点击安装,重启AS生效。
添加依赖
在Android Studio项目 build.gradle(Project:项目名称)文件中引入:
buildscript {
...
mavenCentral()
}
dependencies {
classpath 'com.jakewharton:butterknife-gradle-plugin:8.7.0'
}
}
在 build.gradle(Module.app)文件中引入:
dependencies {
...
compile 'com.jakewharton:butterknife:8.7.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.7.0'
}
代码示例
编写activity_main.xml中的代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
android:textAllCaps="false" />
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="18sp" />
</LinearLayout>
生成注解:
使用快捷键生成注解,选中布局文件—>Alt+Insert,如图:
选中Generate Butterknife Injections,如图:
MainActivity.java中的代码如下:
public class MainActivity extends AppCompatActivity {
@BindView(R.id.btn)
Button btn;
@BindView(R.id.tv)
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//绑定Activity
ButterKnife.bind(this);
}
// 绑定监听事件,比如点击事件
@OnClick(R.id.btn)
public void clickBtn() {
tv.setText("Hjw");
}
}
非Activity中使用 Butter Knife
在Fragment中使用Butter Knife
public class MyFragment extends Fragment {
@BindView(R.id.btn)
Button btn;
@BindView(R.id.tv)
TextView tv;
Unbinder unbinder;
public MyFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_my, container, false);
unbinder = ButterKnife.bind(this, view);
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
}
在Adapter中使用Butter Knife
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 = layoutInflater.inflate(R.layout.item_listview, parent, false);
holder = new ViewHolder(view);
view.setTag(holder);
}
holder.img.setImageResource(R.mipmap.ic_launcher);
return view;
}
static class ViewHolder {
@BindView(R.id.img)
ImageView img;
ViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
}
了解更多用法,请见官网:https://jakewharton.github.io/butterknife/
总结
本教程主要总结了Butter Knife的配置以及使用,欢迎同学们学习。