0%

ButterKnife配置及使用

黄油刀(ButterKnife)

ButterKnife

官方文档

简介(为什么需要使用它?):

ButterKnife取代了findViewById完成View的注入,提高效率

  • 使用注解生成模块代码,用于把一些字段和方法绑定到 Android 的 View;
  • 强大的View绑定和Click事件等处理功能,简化代码,提升开发效率
  • 运行时不会影响APP效率,使用配置方便
  • 代码清晰,可读性强

配置

ButterKnife没有正确配置时,会有NullPointException。

  1. 首先在project的build.gradle中添加classpath
    1
    2
    3
    4
    5
    6
    buildscript {
    dependencies {
    ...
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
    }
  2. 然后是model的build.gradle中添加依赖
    这里看的所有教程都是用compile,apt。但其实compile已经被淘汰很久了。(误事啊误事…)
    ButterKnife已经讲的的很明白了。
    1
    2
    3
    4
    5
    apply plugin: 'com.android.application'
    dependencies {
    implementation 'com.jakewharton:butterknife:(insert latest version)'
    annotationProcessor 'com.jakewharton:butterknife-compiler:(insert latest version)'
    }
  • insert laster verrsion 目前是8.8.1(2018.09)

使用:

  • 绑定资源
    @BindView(R.id) Type tempName;
  1. Activity中
    需在onCreate 的setContentView()后添加ButterKnife.bind(this)绑定布局;
  2. Fragment & Adapter ViewHolder中
    F : ButterKnife.bind(this, rootView);
    A :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class MyAdapter extends BaseAdapter {
    static class ViewHolder{
    @BindView(R.id.text_view) TextView mTextView;
    @BindView(R.id.button) Button mButton;;
    public ViewHolder(View itemView) {
    ButterKnife.bind(this, itemView);
    }
    }
    }
  3. setOnClickListener() –绑定点击事件
    1
    2
    @OnClick(R.id)
    void setClick(View v){}
  • 参数接受一个id集合用于多个View处理同一事件
    1
    2
    @OnClick({R.id, R.id, ...})
    void setClick(View v){}
  1. BaseActivity中是使用
    由于butterknife绑定需要在每个Activity中都实现一遍,所以可以将这个操作写进一个Base,然后让所有的Activity都去继承它。BaseActivity中的实现细节如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class BaseActivity extends AppCompatActivity{
    protected UnBinder mBinder;
    public void setContentView(int LayoutResId){
    super.setContentView(LayoutResId);
    mBinder = ButterKnife.bind(this); //ButterKnife初始化
    }
    protected void onDestroy() {
    mBinder.unbind();
    super.onDestroy();
    }
    }

    注意:

  • 这些view不能是priavate 或static 。
  • 在使用BindView方法的时候,如果目标View没有找的的话,会抛出异常。如果不想受到这个异常,可以使用@Nullable(该注释标注了该参数可否为null)。
  • 由于在Activity中都要进行ButterKnife.bind操作,所以可以将bind操作写入baseActivity。8.4以后ButterKnife移除了ButterKnife.unBind()方法,取而代之的是ButterKnife.bind(this)会返回一个Unbinder的引用,通过Unbinder的unbind()方法进行解除绑定。
  1. Zelezny插件的使用
  • File->Setting->Plugins,打开搜索Zelezny,选择Android ButterKnife Plugins下载,重启AS可用。
  • 也可以选择本地安装。先到该项目的地址,下载jar包。
    传送门
    jar包下载
    然后还在上边那个Plugins页,点击Install plugins from disk…
    本地导入
    然后重启。。。

  • 使用
    官方的使用演示
    注意:将光标移动到R.layout上操作

  • 有人说该插件只支持butterknife:7.0.1,可以试试将8.8.1切换到7.0.1的重新集成,应该可以使用Generate butterknife菜单功能,再切换回8.8.1版本,zelezny就可以正常使用了。

PPs:其实讲道理,我也不能正常使用,AS重启以后插件没安装上,两种安装方式都不能成功,大概可能还是版本的原因…但因为该插件口碑很好,所以还是介绍一下…

参考文章:
https://www.zhihu.com/question/31951875


完结 撒花 ฅ>ω<*ฅ