博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ButterKnife是啥
阅读量:4555 次
发布时间:2019-06-08

本文共 3223 字,大约阅读时间需要 10 分钟。

一、ButterKnife是啥

注解中相对简单易懂的很不错的开源框架

1. 强大的View绑定和Click事件处理功能,简化代码,提升开发效率
2. 方便的处理Adaper里的ViewHolder绑定问题
3. 运行时不会影响app效率,使用配置方便
4. 代码清晰,可读性强

github开源地址:

二、使用步骤

2.1 添加插件

File -> Settings -> Plugins -> 搜索ButterKnife,找到Android ButterKnife Zeleany进行安装重启AndroidStudio

2.2 添加依赖

在对应module的build.gradle里面添加下面的依赖,重新编译就会自动下载

dependencies {
  compile 'com.jakewharton:butterknife:8.5.1'
  annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
}

注意和Dagger2配合使用需要注意把annotationProcessor改为apt。

2.3 在Activity中使用

2.3.1 使用插件

在R.layout.activity_main上面右击 选择Generate -> Generate ButterKnife injections,即可选择 生成view对应的注解,还支持ViewHolder和OnClick

2.3.2 手动

  1. 绑定ButterKnife
 
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //绑定初始化ButterKnife
    ButterKnife.bind(this);
}
  1. 定义View

下面的代码把R.id.tv_test这个TextView定义了为tvTest,注意类型不能为static或者private

@BindView(R.id.tv_test)
TextView tvTest;
 
//当然写成一行也是可以
@BindView(R.id.tv_test) TextView tvTest;
  1. 点击事件

添加注解@OnClick(R.id.xx)即为点击方法,对应的View参数可有可无,如果有多个参数可以只加一个参数(例如onItemClick有四个参数,你可以只加一个int position的参数)。如果参数错误,编译的时候会报错。

@OnClick(R.id.bt_test)
public void onClick(View v) {
    tvTest.setText("被点击了...");
}

如果定义为指定的类型,将会自动转换

@OnClick(R.id.bt_test)
public void onClick(Button button) {
    tvTest.setText("被点击了...");
}

更多事件看下面的 三

2.4 在Fragment中使用

在Fragment中使用和在Activity中使用,只是有一点不一样:在获取View的时候,加多一个view参数把View绑定到ButterKnife就行了。

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.my_fragment, container, false);
    //这里需要加多一个参数view
    ButterKnife.bind(this, view);
    return view;
}

Fragment生命周期和activity有点不同,销毁的时候可以进行解绑

 
public class MyFragment extends Fragment {
 
    @BindView(R.id.bt_test)
    Button btTest;
 
    private Unbinder unbinder;
 
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.my_fragment, container, false);
        //绑定的时候返回了一个Unbinder对象
        unbinder = ButterKnife.bind(this, view);
        return view;
    }
 
    @Override
    public void onDestroyView() {
        super.onDestroyView();
        unbinder.unbind();
    }
}

2.5 在Adapter ViewHolder中使用

把ViewHolder加一个构造方法,在new ViewHolder的时候把view传递进去。

static class ViewHolder {
    @BindView(R.id.tv_item_test)
    TextView tvItemTest;
    @BindView(R.id.bt_item_test)
    Button btItemTest;
    public ViewHolder(View view) {
        ButterKnife.bind(this, view);
    }
}

item里面Button控件的点击事件也可以使用注解@OnClick来实现,在适配器里面添加就行,如:

 
    //item的button的点击事件
    @OnClick(R.id.bt_item_test)
    void onClick(){
        Toast.makeText(context,"点击了按钮",Toast.LENGTH_SHORT).show();
 
    }
 
    static class ViewHolder {
        @BindView(R.id.tv_item_test)
        TextView tvItemTest;
        @BindView(R.id.bt_item_test)
        Button btItemTest;
        public ViewHolder(View view) {
            ButterKnife.bind(this, view);
        }
    }

注意: 如果item里面有Button等这些有点击的控件事件的,需要设置这些控件属性focusable为false

转载于:https://www.cnblogs.com/liangxy/p/9105075.html

你可能感兴趣的文章
实力为王 八年DBA经验谈
查看>>
2-sat 问题 【例题 Flags(2-sat+线段树优化建图)】
查看>>
ext3.2 右击动态添加node的treepanel
查看>>
Database links
查看>>
1035 插入与归并(25 分)
查看>>
STL中排序函数的用法(Qsort,Sort,Stable_sort,Partial_sort,List::sort)
查看>>
如何解决php 生成验证码图片不显示问题
查看>>
PHP,javascript实现大文件上传
查看>>
c#图像处理算法学习
查看>>
webApi之FromUri和FromBody区别
查看>>
【SoapUI】http接口测试
查看>>
各种工具网站
查看>>
数据库事务
查看>>
xe7 控件升级
查看>>
TFrame bug
查看>>
刚学习的如何才能自信的拍美美的婚纱照呢(要结婚啦)
查看>>
M51文件注释
查看>>
关于临界资源访问互斥量的死锁问题
查看>>
django-view层
查看>>
异步加载JS的方法。
查看>>