butterknife使用_Android ButterKnife框架使用介绍

3753525994cbd4107db86fc329b26dda.png

ButterKnife 的基本介绍

  • ButterKnife是一个使用注解对View进行注入的框架,原本如果我们要对Activity或Fragment中的View进行赋值,我们基本都是通过findViewById进行赋值,所以导致代码中会有很大一部分代码是赋值代码,不仅阅读起来疲倦,而且也很浪费开发时间。用ButterKnife则可以很轻松的省去这些步骤。最重要的一点,使用ButterKnife对性能基本没有损失,因为ButterKnife用到的注解并不是在运行时反射的,而是在编译的时候生成新的class。项目集成起来也是特别方便,使用起来也是特别简单。
  • Butterknife强大的View绑定和Click事件处理功能,简化代码,提升开发效率。可以方便的处理Adapter里的ViewHolder绑定。运行时不会影响APP效率,使用配置方便。代码清晰,可读性强。

ButterKnife 的使用

1.项目中引入ButterKnife,10.2.1为ButterKnife的版本号

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

2.在Activity中增加绑定的代码

acitivity_main.xml

<?xml version="1.0" encoding="utf-8"?>    

MainActivity.java

public class MainActivity extends AppCompatActivity {    @BindView(R.id.tv_text)    TextView mTvText;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);        mTvText.setText("ButterKnife绑定成功");    }}

PS :如果编译运行报以下错误

Static interface methods are only supported starting with Android N (--min-api 24): void butterknife.Unbinder.lambda$static$0()Stack trace:com.android.tools.r8.a: Static interface methods are only supported starting with Android N (--min-api 24): void butterknife.Unbinder.lambda$static$0()at com.android.tools.r8.dex.r.a(:47)at com.android.tools.r8.dex.r.b(:4)at com.android.tools.r8.dex.b.a(:63)at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:125)at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:69)at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78)at com.google.common.util.concurrent.MoreExecutors$DirectExecutorService.execute(MoreExecutors.java:322)at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)at com.google.common.util.concurrent.AbstractListeningExecutorService.submit(AbstractListeningExecutorService.java:66)at com.google.common.util.concurrent.AbstractListeningExecutorService.submit(AbstractListeningExecutorService.java:36)...

则需要在build.gradle中增加以下代码

android {    compileSdkVersion 29   ...   //增加以下代码,为项目提供Java 1.8的支持    compileOptions {        sourceCompatibility JavaVersion.VERSION_1_8        targetCompatibility JavaVersion.VERSION_1_8    }  ...}

运行效果图

5aed90285b461ef6b5173f86eb2270c4.png

对于MainActivity,编译后的效果是这样的

public void bind(MainActivity activity) {  activity.mTvText = (android.widget.TextView) activity.findViewById(2130968578);}

其实ButterKnife,主要就是在编译当中,把缺少的findViewById代码补充完整,所以实现的原理是一样的。

ButterKnife不仅可以对View进行绑定,也可以对资源进行绑定

例如字符串资源,图片资源,颜色等

class ExampleActivity extends Activity {  @BindString(R.string.title) String title;  @BindDrawable(R.drawable.graphic) Drawable graphic;  @BindColor(R.color.red) int red; // int or ColorStateList field  @BindDimen(R.dimen.spacer) float spacer; // int (for pixel size) or float (for exact value) field  // ...}

Adapter的绑定

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 = inflater.inflate(R.layout.whatever, parent, false);      holder = new ViewHolder(view);      view.setTag(holder);    }    holder.name.setText("John Doe");    // etc...    return view;  }  static class ViewHolder {    @BindView(R.id.title) TextView name;    @BindView(R.id.job_title) TextView jobTitle;    public ViewHolder(View view) {      //绑定操作      ButterKnife.bind(this, view);    }  }}

多个View进行绑定操作

@BindViews({ R.id.first_name, R.id.middle_name, R.id.last_name })List nameViews;

点击事件的监听绑定

@OnClick(R.id.submit)public void submit(View view) {  // TODO submit data to server...}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值