Android中ButterKnife的使用

    技术2022-07-12  91

    原文:https://blog.csdn.net/wen_haha/article/details/85878292 记录学习

    简介

    ButterKnife是注解中相对简单易懂的很不错的开源框架,使用ButterKnife可以提升我们的开发效率,不需要写很多findViewById来找到View对象,可以为我们省去很多的时间。

    特点

    1.强大的View绑定和Click事件处理功能,简化代码,提升开发效率

    2.方便的处理Adapter里的ViewHolder绑定问题

    3.运行时不会影响APP效率,使用配置方便

    4.代码清晰,可读性强

    下载地址:https://github.com/JakeWharton/butterknife Butterknife插件:zelezny 插件安装

    在File->Setting->Plugins中输入butterknife添加插件,然后重启AndroidStudio

    插件使用

    安装完插件以后,需要重启Android Studio,重启完以后,我们只需要把光标放到setContentView(R.layout.activity_main)上,然后alt+insert。对于多个需要绑定的id,省下了很多时间。我用一个gif动图来说明一下怎么使用吧

    基本配置

    1.在项目的project 的build.gredle 文件中添加。

    implementation 'com.jakewharton:butterknife:8.8.0' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.0'2.ButterKnife的绑定

    ①在Activity中绑定ButterKnife

    在Activity中的onCreate绑定ButterKnife,我觉得最好的方式是写一个BaseActivity,在BaseActivity中完成绑定。在Activity中绑定ButterKnife必须在setContentView之后。使用ButterKnife.bind(this)进行绑定。具体实现代码如下:

      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         ButterKnife.bind(this);     }②在Fragment中绑定ButterKnife

    在Fragment中绑定ButterKnife的时候,需要在onCreateView中绑定,ButterKnife会返回一个Unbinder的实例,在Fragment中绑定ButterKnife,必须在onDestroyView方法中调用unbind方法进行Fragment解绑,还有一点,在Fragment中绑定ButterKnife的使用,this不能换成getActivity,只能用this,切记切记。使用ButterKnife.bind(this, view)进行绑定。代码如下:

      @Override     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {         View view = inflater.inflate(R.layout.activity_item, null);         bind = ButterKnife.bind(this, view);         return view;     }       @Override     public void onDestroy() {         super.onDestroy();         //解除绑定         bind.unbind();     }③在adapter中绑定ButterKnife

    我们还可以在adapter中绑定ButterKnife,我们在adapter的ViewHolder中使用,在ViewHolder中添加一个构造方法,在进行new的时候将view传递进去。使用ButterKnife.bind(this, view)进行绑定。代码如下:

      public View getView(int position, View convertView, ViewGroup parent) {         ViewHolder vh=null;         if (convertView==null){             convertView=  View.inflate(context,R.layout.activity_item,null);             vh=new ViewHolder(convertView);             convertView.setTag(vh);         }else{           vh= (ViewHolder) convertView.getTag();         }         vh.mIvPhoto.setImageResource(R.drawable.tupain);         vh.mTvResult.setText(mDatas.get(position));         return convertView;     }       class ViewHolder{         @BindView(R.id.iv_photo)          ImageView mIvPhoto;         @BindView(R.id.tv_result)          TextView mTvResult;         public ViewHolder(View view) {             ButterKnife.bind(this,view);         }     }

    ButterKnife的基本使用

    我们在这里讲一下ButterKnife的基本使用,这里大体列举一下,具体的使用方式大家可以去官方下载看一下。

    1.绑定View

    ①控件id注解:@BindView()

    @BindView(R.id.tv_result) public TextView mTvResult; @BindView(R.id.iv_photo) public ImageView mIvPhoto;②布局中多个id注解:@BindViews()

    public class MainActivity extends Activity {         @BindViews({ R2.id.button1, R2.id.button2,  R2.id.button3})       public List<Button> listButton ;         @Override       protected void onCreate(Bundle savedInstanceState) {           super.onCreate(savedInstanceState);           setContentView(R.layout.activity_main);             ButterKnife.bind(this);             listButton .get( 0 ).setText( "我是button1");           listButton .get( 1 ).setText( "我是button2 ");           listButton .get( 2 ).setText( "我是button3 ");       }   }2.绑定资源

    ①绑定string字符串:@BindString()

    @BindString(R.string.app_name) public String appName;②绑定array数组:@BindArray()

     <string-array name="basketballStar">         <item>科比</item>         <item>杜兰特</item>         <item>詹姆斯</item>         <item>库里</item>         <item>哈登</item>     </string-array>    @BindArray(R.array.basketballStar)  public String[] stars;③绑定颜色值:@BindColor()

    @BindColor(R.color.colorAccent) public int color;④绑定drawable:@BindDrawable

     @BindDrawable(R.drawable.tupain)  public Drawable drawable;3绑定监听

    我们这里就讲一下控件的监听事件

    绑定控件点击事件:@onClick()

    @OnClick(R.id.btn_butterKnife_drawable)     public void gainPhoto(View view){             } @onCheckedChanged监听的使用

    @OnCheckedChanged({R.id.rb_one,R.id.rb_two,R.id.rb_three})       public void OnCheckedChangeListener(CompoundButton view, boolean ischanged ){           switch (view.getId()) {               case R.id.rb_one:                   if (ischanged){//注意:这里一定要有这个判断,只有对应该id的按钮被点击了,ischanged状态发生改变,才会执行下面的内容                      }                   break;               case R.id.rb_two:                   if (ischanged) {                   }                   break;               case R.id.rb_three:                   if (ischanged) {                   }                   break;               default:                   break;           }       }更多绑定注解 还有很多绑定注解,我就不一一说明了,我们通过两张图片来了解一下。

    ①绑定注解,视图,资源等等,一共13个

    ②绑定事件,一共有12个事件监听

    ButterKnife的代码混淆 在混淆文件中,添加如下代码:

    -keep class butterknife.** { *; }   -dontwarn butterknife.internal.**   -keep class **$$ViewBinder { *; }     -keepclasseswithmembernames class * {       @butterknife.* <fields>;   }     -keepclasseswithmembernames class * {       @butterknife.* <methods>;   } 以上就是关于ButterKnife的基本使用,如果对你的学习有帮助的话,可以点个关注哟,大家一起学习,一起进步。

    下载

    csdn:https://download.csdn.net/download/wen_haha/10898304

    github:https://github.com/kongkongdaren/ButterKnifeDemo  

    Processed: 0.012, SQL: 9