Android依赖注入框架---ButterKnife

news/2024/12/22 10:06:15/

大家在开发中,经常会使用到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_8targetCompatibility 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):    

  @Overridepublic 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可能在布局中不存在。

 


http://www.ppmy.cn/news/690028.html

相关文章

基于WebGL架构的3D可视化平台—粮仓3D场景

前言 什么才是智慧粮仓 正所谓“国以民为本,民以食为天”。粮食既是关系国计民生和国家经济安全的重要战略物资,也是人民群众最基本的生活资料。其中粮仓是粮食建设的根基,对保障粮食安全尤为重要。随着信息化技术发展,全国各地…

50代码HTML5 Canvas 3D 编辑器优雅搞定

原创 文章, 转载请标明出处 https://blog.csdn.net/liuwei000000/article/details/83378837 1024程序员节刚过,手痒想实现一个html的3d编辑器,看了three.js 同时还看了网上流传已久的<<基于 HTML5 Canvas 的简易 2D 3D 编辑器>>,都觉得太复杂,一个3d编辑器…

基于ThingJS开发的WebGL H5停车场三维可视化管理Demo

前言 随着社会的发展&#xff0c;城市中的汽车越来越多。车辆集中存放管理的场所被人类提出车辆进出的秩序、车辆存放的安全性、车辆存放管理的有偿性等要求。停车场系统应用现代机械电子及通讯科学技术&#xff0c;集控制硬件、软件于一体。随着科技的发展&#xff0c;停车场…

monoSLAM

单目相机的优点&#xff08;和双目相机相比&#xff09;&#xff1a;双目相机测得的深度距离收到基线长度的限制&#xff0c;单目相机就可以解决这个问题。 参考博客&#xff1a;http://blog.csdn.net/heyijia0327/article/details/50758944 &#xff08;一定要看&#xff0c…

Mooo

【题目描述】 有 N 个能量发射站排成一行&#xff0c;每个发射站i都有不相同的高度 Hi&#xff0c;并能向两边&#xff08;当然两端的只能向一边&#xff09;同时发射能量值为 Vi 的能量&#xff0c;并且发出的能量只被两边最近的且比它高的发射站接收。 显然每个发射站有可能接…

mood

心情不好

demo.

Demo源代码 <?php header(X-XSS-Protection: 0); $xss isset($_GET[xss])? $_GET[xss] : ; $xss str_replace(array("(",")","&","\\","<",">",""), , $xss); echo "<img sr…

ADMM

背景知识 对偶上升 等式约束优化问题&#xff1a; f f f是凸函数&#xff0c;2.1的拉格朗日项为&#xff1a; 其对偶函数为&#xff1a; inf代表下确界&#xff0c;之所以用下确界而不是用min&#xff0c;可能是因为有些函数没有极值&#xff08;定义域取不到&#xff09…