Android ButterKnife(黄油刀)的使用

Android Studio 结合 ButterKnife Zelezny 高效使用 Butterknife(黄油刀) 正文: 这里给大家提供一下butterknife的jar包下载,直接copy到libs包下,添加到项目中就好了。点击打开链接 这里我们就按Android studio 的案例来演示一下。 第一 阅读详情
首语
  • 在android开发过程中,我们会写大量的布局和点击事件,像findViewById、设置view监听这样简单而重复的操作让人觉得麻烦,而ButterKnife是注解中相对简单易懂的很不错的开源框架。
优势
  • 强大的View绑定和Click事件处理功能,简化代码,提升开发效率。
  • 方便的处理Adapter里的ViewHolder绑定问题。
  • 运行时不会影响APP效率,使用配置方便。
  • 代码清晰,可读性强。
GitHub地址:https://github.com/JakeWharton/butterknife
ButterKnife基本使用
使用步骤

1.在Setting->Plugins中输入butterknife——>添加插件Android ButterKnife Aelezny ——>点击安装。
2.dependencies中添加依赖:

implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor "com.jakewharton:butterknife-compiler:8.8.1"
ButterKnife使用心得
  • 在Activity类中绑定,ButterKnife.bind(this);必须在setContentView();之后绑定;且父类bind绑定后,子类不需要再bind。
  • 在非Activity 类(eg:Fragment、ViewHold)中绑定: ButterKnife.bind(this,view);这里的this不能替换成getActivity()。
  • 在Activity中不需要做解绑操作,在Fragment 中必须在onDestroyView()中做解绑操作。
  • 使用ButterKnife修饰的方法和控件,不能用private or static 修饰,否则会报错。
    错误: @BindView fields must not be private or static. (com.zyj.wifi.ButterknifeActivity.button1)。
  • setContentView()不能通过注解实现。(其他的有些注解框架可以)
  • 使用Activity为根视图绑定任意对象时,如果你使用类似MVC的设计模式你可以在Activity 调用ButterKnife.bind(this, activity),来绑定Controller。
  • 使用ButterKnife.bind(this,view)绑定一个view的子节点字段。如果你在子View的布局里或者自定义view的构造方法里 使用了inflate,你可以立刻调用此方法。或者,从XML inflate来的自定义view类型可以在onFinishInflate回调方法中使用它。
在Activity中绑定ButterKnife
public class ButterKnifeActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_butter_knife);
        //在Activity中绑定ButterKnife
        ButterKnife.bind(this);
    }
}
在Fragment中绑定ButterKnife
public class ButterKnifeFragment extends Fragment {

    private Unbinder unbinder;
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_butter_knife, container, false);
        //在Fragment中进行绑定ButterKnife,返回一个Unbinder(进行解绑),这里的this不能用Activity
        unbinder = ButterKnife.bind(this, view);
        return view;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        //在onDestroyView中进行解绑操作
        unbinder.unbind();
    }
}
在Adapter中绑定ButterKnife
public class ButterKnifeAdapter extends BaseAdapter {

    @Override
    public View getView(int position, View view, ViewGroup parent) {
        ViewHolder holder;
        if (view != null) {
            holder = (ViewHolder) view.getTag();
        } else {
            view = view.inflate(R.layout.testlayout, parent, false);
            holder = new ViewHolder(view);
            view.setTag(holder);
        }

        holder.name.setText("ButterKnife");
        holder.job.setText("Android");
        return view;
    }

    static class ViewHolder {
        @BindView(R.id.title)
        TextView name;
        @BindView(R.id.job)
        TextView job;

        public ViewHolder(View view) {
            ButterKnife.bind(this, view);
        }

    }
}
View绑定
  • 控件id注解
@BindView(R.id.fragment_answer_et1)
EditText et1;
@BindView(R.id.fragment_answer_et2)
EditText et2;
@BindView(R.id.fragment_answer_et3)
EditText et3;
  • 多个控件id注解
public class MainActivity extends AppCompatActivity {  

    @BindViews({ R.id.button1, R.id.button2,  R.id.button3})  
    public List<Button> buttonList ;  

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  

        ButterKnife.bind(this);  

        buttonList.get( 0 ).setText( "hello 1 ");  
        buttonList.get( 1 ).setText( "hello 2 ");  
        buttonList.get( 2 ).setText( "hello 3 ");  
    }  
}  
事件绑定
  • 控件点击事件
public class MainActivity extends AppCompatActivity {  

    @OnClick(R.id.button1 )   //给 button1 设置一个点击事件  
    public void showToast(){  
        Toast.makeText(this, "is a click", Toast.LENGTH_SHORT).show();  
    }  

    @OnLongClick( R.id.button1 )    //给 button1 设置一个长按事件  
    public boolean showToast2(){  
        Toast.makeText(this, "is a long click", Toast.LENGTH_SHORT).show();
    }  

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        //绑定activity  
        ButterKnife.bind( this ) ;  
    }  
}  
  • 多个id绑定事件
public class MainActivity extends AppCompatActivity {  

    //Tip:当涉及绑定多个id事件时,我们可以使用Android studio的Butterknife
    //插件zelezny快速自动生成
    @OnClick({R.id.ll_product_name, R.id.ll_product_lilv, R.id.ll_product_qixian, R.id.ll_product_repayment_methods})  
    public void onViewClicked(View view) {  
        switch (view.getId()) {  
            case R.id.ll_product_name:  
                System.out.print("我是点击事件1");  
                break;  
            case R.id.ll_product_lilv:  
                System.out.print("我是点击事件2");  
                break;  
            case R.id.ll_product_qixian:  
                System.out.print("我是点击事件3");  

                break;  
            case R.id.ll_product_repayment_methods:  
                System.out.print("我是点击事件4");  
                break;  
        }  
    }  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        //绑定activity  
        ButterKnife.bind( this ) ;
  • 省略setOnClickListener()
@OnClick(R.id.basic_finish_a_button)
    void finishA(View view) {
        finish();
    }//方法不能被private或public修饰,并且有一个参数
ButterKnife.inject(this);
  • ListView的点击@OnItemClick, CheckBox的@OnCheckedChanged也可以实现省略操作。
更多绑定注解
  • @BindView—->绑定一个view;id为一个view 变量
  • @BindViews —-> 绑定多个view;id为一个view的list变量
  • @BindArray—-> 绑定string里面array数组;@BindArray(R.array.city ) String[] citys ;
  • @BindBitmap—->绑定图片资源为Bitmap;@BindBitmap( R.mipmap.wifi ) Bitmap bitmap;
  • @BindBool —->绑定boolean值
  • @BindColor —->绑定color;@BindColor(R.color.colorAccent) int black;
  • @BindDimen —->绑定Dimen;@BindDimen(R.dimen.borth_width) int mBorderWidth;
  • @BindDrawable —-> 绑定Drawable;@BindDrawable(R.drawable.test_pic) Drawable mTestPic;
  • @BindFloat —->绑定float
  • @BindInt —->绑定int
  • @BindString —->绑定一个String id为一个String变量;@BindString( R.string.app_name ) String meg;
更多事件注解
  • @OnClick—->点击事件
  • @OnCheckedChanged —->选中,取消选中
  • @OnEditorAction —->软键盘的功能键
  • @OnFocusChange —->焦点改变
  • @OnItemClick item—->被点击(注意这里有坑,如果item里面有Button等这些有点击的控件事件的,需要设置这些控件属性focusable为false)
  • @OnItemLongClick item—->长按(返回真可以拦截onItemClick)
  • @OnItemSelected —->item被选择事件
  • @OnLongClick —->长按事件
  • @OnPageChange —->页面改变事件
  • @OnTextChanged —->EditText里面的文本变化事件
  • @OnTouch —->触摸事件
  • @Optional —->选择性注入,如果当前对象不存在,就会抛出一个异常,为了压制这个异常,可以在变量或者方法上加入一下注解,让注入变成选择性的,如果目标View存在,则注入, 不存在,则什么事情都不做。
基于opencv自定义网格板的相机标定软件源码 本软件开发版使用的是VS2013和QT5.7, 安装版的需要安装VS核心库(目录里的vcredist_x64.exe, 已安装VS的不需要)。采用强大的模板匹配算法,本程序适用于自定义大范围网格标定(本例程网格使用的是自己画的网格板31*21*10cm),网格点识别度高,矫正速度快,精度高。 使用步骤 第1步: 打开图片,打开标定工具GridCalibTool.exe, 然后选择打开一张待标定的图(CalibFiles文件夹下的500.jpg)。如下图: 第2步: 提取待标定区域(去掉多余部分,只保留网 阅读详情

相关推荐

ArcGIS 10.4 Desktop安装步骤。

步骤 1 :安装 LicenseManager 有了安装包以后,我们进入安装包文件目录,如图所示,首先需要安装ArcGIS license manager,即点击打开图中红色框中exe文件。 PS:安装 LicenseManager,关于 License 的安装路径一般默认即可,因为很小的,装C 盘也无所谓了,当然了自己改了也可以的,但是不建议! 即便修改路径,建议只改盘符,不修改相对路径方式! 如:C:\Program Files (x86)\ArcGIS\License10.6 修改为 D:\.

IT爱好者 2万+

Android(ButterKnife)黄油刀使用详解

Android(ButterKnife)黄油刀使用详解

ojbk99267710的博客 1180

【上海大学计算机组成原理实验报告】一、数据传送实验

将58H写入A寄存器//将6BH写入W寄存器//将C3H写入R1寄存器//将C3H写入R1寄存器//了解实验仪器数据总线的控制方式//掌握数据传送的基本原理//掌握各寄存器的结构、工作原理及其控制方法//数据传送实验

HackerKevon的博客 3509

ButterKnife(黄油刀)基本使用与源码解析

前言 ButterKnife又称黄油刀,是一款快速绑定Android视图中字段和方法的注解框架,也是Android开发中比较常用的一款快速注解框架,通过ButterKnife的合理运用,我们可以避免重复地书写findViewById,在各种场合下快速地绑定view中的多种事件,大大提高开发的效率,它具有如下几点主要的功能: 通过@BindView注解消除findViewById的使用 将多个v...

ai-exception的博客 5172

计算机网络自顶向下(第八版)第一章课后习题

电路交换网络具有以下优点:资源独占性,在建立连接时,电路交换网络为通信双方独占一条物理路径,不会受到其他用户的影响。低时延,由于建立了专用路径,数据传输时延较小,适合对时延敏感的应用,如实时语音和视频通信。数据链路层:提供节点之间可靠的数据传输,主要任务是错误检测和纠正,以及数据帧的传输和访问控制。移动蜂窝网络:如4G LTE和5G,通过移动基站提供的无线信号实现移动设备的互联网接入。网络层:负责数据包的路由和转发,主要任务是通过网络选择最佳路径,进行流量控制和拥塞控制。手机,服务器,路由器,电脑;

hiahiakk的博客 2255

瑞芯微rv1126 rtsp+mpp+rga取流

瑞芯微rv1109 rtsp+mpp+rga取流

ZuoSeDiao的博客 6338

ButterKnife使用详解

在android编程过程中,我们会写大量的布局和点击事件,像初始view、设置view监听这样简单而重复的操作让人觉得麻烦类,所以可以采用注解的方式去实现,而ButterKnife则是注解中相对简单易懂的很不错的开源框架,接下来就介绍一下如何使用。基本参照官方文档,加上自己的心得。 使用心得: 1.Activity ButterKnife.bind(this);必须在setConten

ITjianghuxiaoxiong的专栏 9万+

109. SAP ABAP 应用程序中的锁机制和工作原理介绍

SAP ABAP 系统中的锁概念,是 SAP ABAP 为了保证`数据一致性`而引入的一种保护机制。 像 SAP 这种复杂的企业级应用,系统中同一时间段的同一份数据,可能会有多个 Transaction(终端用户或者 API )同时进行读写操作。为了防止出现数据不一致,SAP ABAP 引入了锁机制。 这种锁机制并非数据库服务器层面的锁,而是在 SAP ABAP 应用服务器层面上工作,加锁和解锁都由专门的 ABAP Function Module 来完成。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1466

Android常用之Butterknife使用详解

Butterknife简介 Butterknife中文又名黄油刀,是 JakeWharton大神开源的一款Android视图的字段和方法绑定快速注解框架.也是Android开发中比较常用的一款快速注解框架了,可以不用不断的重复findViewById,在各种场合下快速绑定view的多种事件,大大提高了开发的效率. 为什么开发用Butterknife? 1、强大的View绑定和Click事件处理...

weixin_34279184的博客 450

Rerender A Video 技术浅析(四):跨帧约束

时间一致性是指在视频处理过程中,保持相邻帧之间内容、风格和运动的平滑过渡,避免出现视觉上的不连续性或伪影。时间一致性跨帧约束模块的主要目标是在视频增强、风格迁移等任务中,确保处理后的视频在时间维度上保持一致性和稳定性。该模块主要通过以下几种方式实现时间一致性:1.时序损失(Temporal Loss):最小化相邻帧之间的差异,确保帧间内容的平滑过渡。2.循环一致性损失(Cycle Consistency Loss):确保帧间转换的一致性,避免出现风格漂移。3.

m0_75253143的博客 1480

【毕设全程指导】基于YOLOv8的包装商品检测与可视化系统(SKU110K实战)

本文介绍了一个基于YOLOv8的包装商品检测与可视化系统毕业设计方案。项目采用SKU110K数据集,通过CSV转TXT格式转换适配YOLO模型训练,包含详细的环境搭建、模型配置和训练流程。系统实现了包装商品的自动化检测,并开发了Tkinter可视化界面进行交互式检测展示。该方案结合产业应用需求与技术深度,既具备实用价值,又能充分展示学生的技术能力,适合作为计算机视觉相关专业的毕业设计选题。整个项目从数据准备到界面开发完整覆盖,帮助学生系统掌握目标检测项目的完整实现流程。

LXY_LOVE36的博客 145

android ButterKnife的简单使用

今天,简单讲讲android里如何使用ButterKnife。 Android框架系列: 一.android EventBus的简单使用 二.android Glide简单使用 三.android OKHttp的基本使用详解 四.android RxJava(RxAndroid)的简单使用 五.android ButterKnife的简单使用   前言: ButterKnife是一...

谢岩的博客 1564

069、PCIE属性字段:缓存、顺序与安全

上个月调试一块自研的PCIE采集卡,遇到了一个诡异的问题:主机通过DMA从设备读取图像数据,大部分帧正常,但偶尔会出现局部数据错位,像是缓存没刷干净。用逻辑分析仪抓链路层报文,发现TLP(事务层包)本身完好,但内存中的数据就是不对。排查三天后,终于锁定在设备端TLP的**属性字段(Attribute Field)**配置上——那几位看似不起眼的缓存、顺序控制位,差点让项目延期。今天我们就拆解PCIE事务头中的这个关键区域,看看它如何影响系统性能与数据安全。

z534437748的博客 49

Android黄油刀ButterKnife配置

AS版本:3.5 添加依赖: //下载最新黄油刀 implementation 'com.jakewharton:butterknife:10.2.0' annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0' 下载ButterKnife插件 在OnCreate()的Layout布局文件中右...

科技向善 456

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Android Butterknife(黄油刀) 使用方法总结

Android Butterknife(黄油刀) 使用方法总结

qq_32290639的博客 287

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Android神兵利器之黄油刀的使用(ButterKnife)

黄油刀的使用是非常简单的事情,下载的时候需要注意的有两步: 1.下载jar,而下载jar包则有两种方法: A: File-&gt;Project Structure-&gt;Dependencies-&gt;Library dependency 中直接搜索butterknife选择任意一个就可以了。 B:添加依赖 在app的build.gradle中 写下如下一句话: compile ‘...

江子涛Tesla的专栏 6151

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Android Butterknife黄油刀

配置Butterknife 一.在主Moduel中的build.gradle中添加如下配置: dependencies { implementation 'com.jakewharton:butterknife:8.8.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' } 使用场景 Activity public class MainActivity extends AppCompatActivity {

qq_41917534的博客 405

android 添加黄油刀,Android Butterknife 黄油刀的使用

1、ButterKnife是一个由JakeWharton写的开源框架,它使用注解处理将属性和方法和View绑定,以生成模板代码。Eliminate findViewById calls by using @BindView on fields.Group multiple views in a list or array. Operate on all of them at once with a...

weixin_39960147的博客 556

Android之黄油刀(butterknife)

1.添加黄油刀插件 根build添加: buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' //黄油刀 classpath 'com.jakewh...

qq_36942194的博客 1430

【Android 进阶】ButterKnife-黄油刀

现在养成了一个好习惯,每当我学习了一个新东西,总想要记录下来。记录的过程其实就是对知识的一次梳理,可以查漏补缺。 而记录下来也是为了方便以后的重温,毕竟人的遗忘曲线还是很恐怖的。黄油刀-ButterKnife是什么?ButterKnife是注解框架中相对简单易懂的很不错的开源框架为什么要学习并使用ButterKnife呢? 1.强大的View绑定和Click事件处理功能,简化代码,提升开发效率

Veyron_wu 1251

Android框架之ButterKnife(黄油刀)

Android框架之ButterKnife(黄油刀) Butterknife简介 ButterKnife是一个专注于Android系统的View注入框架,可以减少大量的findViewById以及setOnClickListener代码,可视化一键生成。 ButtonKnife优点 1.强大的View绑定和Click事件处理功能,简化代码,提升开发效率 2.方便的处理Adapter里的V

Android开发-CXY的博客 1153

android[butterKnife(黄油刀)史诗详细使用方法]

butterKnife(黄油刀)小白看了也会的使用方法

m0_63658317的博客 1037

Android:butterKnife(黄油刀的简单使用

butterKnife(黄油刀的简单使用

qq_54348654的博客 1176

黄油刀butterknife Android studio

使用方法: 1.安装插件,安装成功之后,重启as 2. 4.

MoLiLian_123的博客 563

IDEA的Android Studio配置黄油刀(butterknife)

功能和介绍就不多说了,直接开始 1.打开Preferences 2.点击Plugins,选择Browse repositories… ,搜索Android ButterKnife Zelezny插件,进行安装。 3.在build.gradle 中假如依赖 implementation ‘com.jakewharton:butterknife:8.8.1’ apply plugin: '...

Alrey的博客 1182

Android项目添加butterknife(黄油刀)

最近心血来朝,突然想把旧的app更新下代码 build.gradle(app): apply plugin: 'com.android.application' /*apply plugin: 'com.android.library'*/ apply plugin: 'com.jakewharton.butterknife' dependencies { implementation 'com.jakewharton:butterknife:10.2.3' annotationProce

weixin_43184171的博客 451
上一篇: 使用EasyPermissions高效处理权限
下一篇: Android LomBok的使用
八归少年
八归少年 新星创作者: 操作系统技术领域 新星创作者: 操作系统技术领域
博客等级 码龄9年 9011粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

八归少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值