Android依赖注入框架—ButterKnife

  • Post author:
  • Post category:其他


大家在开发中,经常会使用到findViewById 和 setOnClickListener,但是当控件较多时,重复的进行控件获取真的很烦,很郁闷,特别是对一些有强迫症的SuperMan来讲,看着一推findViewById就头皮发麻,不过当你使用了Butter Knife之后,这些问题仿佛迎刃而解了。


1、Butter Knife是什么?

Butter Knife是JakeWharton创建的一个流行的开源注入库,简而言之,就是使用注解的方式替代传统的findViewById和setOnCllickListener.


2、为什么要使用Butter Knife ?

减少findViewById 和 设置点击事件等监听的操作,让代码更加美观和条理性,查找方便,提高代码的可读性。


3、Butter Knife怎样使用?

环境布置:

当前我用的开发环境是Android studio 3.0.1,gradle 4.1 ;

只需要在build.gradle(app)—–>> dependencies中添加两行代码即可,代码如下:

   implementation 'com.jakewharton:butterknife:8.8.1'
   annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

添加完毕,点击Sync即可,这样就可以在项目中使用Butter Knife 了。



Androidx


的朋友们注意了(需要升级到10.0.0):

    implementation 'com.jakewharton:butterknife:10.0.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'



升级到10.0.0,你会发现报错了:

Caused by: com.android.tools.r8.utils.AbortException: Error: Static interface methods are only supported starting with Android N (–min-api 24): void butterknife.Unbinder.lambda $ static $0()

解决办法:

build.gardle(app)  —> android { }内部  (defaultConfig外部),加入:

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
 }

这样就OK了 ,欢迎指证,么么哒!


具体使用1–>绑定与解绑:

Activity中:onCreate方法中进行绑定,ButterKnife.bind(this);

Fragment中:

private Unbinder unbinder;

在onCreateView方法中,在return view之前加入代码:unbinder = ButterKnife.bind(this,view);

在onDestory方法中,在super.onDestoryVIew之后,加入代码:unbinder.unbind();


具体使用2–>控件的findViewById:



选中Activity的布局文件,点击右键,点击Gererate—>Generate ButterKnife Injections—>生成对应控件的注解和点击事件


具体使用3–>控件的onClick设定:

在上述操作中生成,例如

   @OnClick({R.id.btn_hahaha,R.id.btn_momoda})
   public void onViewClicked(View v) {
      switch (v.getId()) {
         case R.id.btn_hahaha:            
            Toast.makeText(this, "hahaha", Toast.LENGTH_SHORT).show();
            break;
         case R.id.btn_momoda:
            Toast.makeText(this, "momoda", Toast.LENGTH_SHORT).show();
            break;
         default:
            break;
      }
 
    }

注意:

自动生成的时候onViewClicked()方法内的参数为空,这里我们是自行加入了 View v ,方便对不同id的控件进行相应的处理 。

多个控件设置点击事件的时候,  @OnClick({R.id.btn_hahaha,R.id.btn_momoda}),括号中的大括号一定要加,不然会报错。


具体使用4–>控件的其他监听:

开发过程中,还可以为view添加其他监听,如:

@OnLongClick,@OnPageChange,@OnPageChange.Callback,@OnTextChanged

@OnTextChanged.Callback,@OnTouch,@OnItemLongClick,@OnCheckedChanged


具体使用5–>绑定资源:

@BindColor(R.color.red) int red;   绑定颜色

@BindString(R.string.activity_head_text) String activityHeadText;   绑定字符串

@BindDimen(R.dimen.btn_margin_title) Float btnMarginTitle ; 绑定具体尺寸

@BindDrawable(R.drawable.ic_launch) Drawable iconLaunch;  绑定图片


具体使用6–>绑定ViewHolder( ListView):

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
      ViewHolder holder;
      if (convertView == null) {
          convertView = mInflater.inflate(R.layout.list_view_item, parent, false);
          holder = new ViewHolder(convertView);
          convertView.setTag(holder);
       } else {
         holder = (ViewHolder) convertView.getTag();
     }
      holder.imageView.setImageResource(R.mipmap.ic_launcher);
      holder.textView.setText(mData.get(position));
      return convertView;
  }    
  static class ViewHolder {
      @BindView(R.id.img_item)
      ImageView imageView;
      @BindView(R.id.tv_item)
      TextView textView;
 
      ViewHolder(View view) {
          ButterKnife.bind(this, view);
      }
  }

使用ButterKnife对ListView中的item进行监听,代码如下:

    @OnItemClick(R.id.list_view)
    public void onItemClick(int position) {
          Toast.makeText(this, "momoda"+position, Toast.LENGTH_SHORT).show();
    }


具体使用7–>

还有一些用法,如果在开发中用到,自行google 查阅一下,基本用法上述已经说明


4、如何在Android studio中添加Butter Knife插件?

在项目中使用Butter Knife时,添加Butter Knife插件是十分有必要的,它可以让我们在studio中更加方便的使用”黄油刀”.


操作步骤

:打开Android studio —>File(页面左上角)—>Setting—>Plugins—>搜索栏目中搜索:ButterKnife,在搜索结果中,选择 Android ButterKnife Zelenzny (下载量多且星星比较多的那个),下载完毕后,重启Android studio即可。


验证方式:

在Activity中用鼠标选中onCreate布局文件,如R.layout.activity.main,把光标移上去,右击选择Generate—>>再选择Generate ButterKnife Injections(如果有这个选项,说明你安装的ButterKnife插件已经可以正常使用了)。

紧接着你选择Generate ButterKnife Injections 这时候会出现一个选择框,将你要进行finViewById和onClick的及控件选中即可,同时,你也可以在此处修改变量的名称。


5、Butter Knife在使用中需要的注意事项.



ButterKinfe在Activity中使用时,只需要在onCreate方法中进行绑定即可,不要解除绑定,但是在Fragment中使用的时候,要在onCreateView中进行绑定,在onDestory方法中解除绑定。

@Nullable annotation : 出现这种情况说明,目标view没有找到,意味着这个field可能在布局中不存在。



版权声明:本文为xyl826原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。