一、Butterknife使用
(1)Butterknife作用
Butterknife是一个专注于Android系统的View注入框架,可以简化代码,提升开发效率;代码清晰,可读性强;同时该框架使用了编译时注解并不会影响应用的性能。
(2)ButterKnife注解
- View绑定
@BindView():单个控件绑定
@BindViews():多个控件绑定 - 事件绑定
@OnClick():点击事件
@OnCheckedChanged():选中,取消选中
@OnEditorAction():软键盘的功能键
@OnFocusChange():焦点改变
@OnItemClick():item被点击
@OnItemLongClick():item长按
@OnItemSelected():item被选择事件
@OnLongClick():长按事件
@OnPageChange():页面改变事件
@OnTextChanged():EditText里面的文本变化事件
@OnTouch():触摸事件 - 资源绑定
@BindInt():绑定int值
@BindFloat():绑定float值
@BindBool():绑定boolean值
@BindString():绑定 String 字符串
@BindArray():绑定 String 里面 Array 数组
@BindBitmap():绑定 Bitmap 资源
@BindDrawable():绑定Drawable资源
@BindColor():绑定一个颜色值
@BindDimen():绑定Dimen
(3)ButterKnife使用
- build.gradle的dependencies中添加如下代码
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
- Activity中使用ButterKnife
public class MainActivity extends AppCompatActivity {
@BindView(R.id.textView)
TextView textView;
@BindString(R.string.name)
String message;
@OnClick(R.id.button)
void onClick() {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//绑定初始化
ButterKnife.bind(this);
}
}
- Fragment中使用ButterKnife
public class MainFragment extends Fragment {
private Unbinder unbinder;
@BindView(R.id.textView)
TextView textView;
@BindString(R.string.name)
String message;
@OnClick({R.id.textView,R.id.button})
void onClick() {
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
//初始化绑定
unbinder = ButterKnife.bind(this, view);
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public void onDestroyView() {
super.onDestroyView();
//解除绑定
unbinder.unbind();
}
}
- Adapter中使用ButterKnife
public class ButterKnifeAdapter extends RecyclerView.Adapter<ButterKnifeAdapter.ViewHolder>{
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
return null;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
}
@Override
public int getItemCount() {
return 0;
}
public static class ViewHolder extends RecyclerView.ViewHolder{
public ViewHolder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}
注意事项
- 在Activity 类中绑定必须在setContentView()方法之后初始化;父类绑定后子类不需要再次绑定。
- 在非Activity类中绑定使用ButterKnife.bind(this, itemView)初始化,这里的this不能替换成getActivity()。
- 在Activity中不需要做解绑操作,在Fragment中必须在onDestroyView()中做解绑操作。
- 使用ButterKnife修饰的方法和控件,不能用private和static修饰,否则会报错。
- setContentView()不能通过注解实现。
(4)Butterknife Zelezny插件使用
- 安装插件:File → Settings → Plugins → 搜索Butterknife Zelezny → 下载安装 → 重启
- 视图绑定操作:右击布局文件 → 选择Generate → 选择Butterknife Injections → 选择实现
Butterknife源码详解
网友评论