ButterKnife 使用方法

手机相机基础技术解析:从硬件到算法的全面指南 手机相机的成像过程可简化为的链路,其核心硬件包括 镜头、CMOS传感器、ISP(图像信号处理器) 以及配套的软件算法。 阅读详情

Butter Knife , Android 视图中field和方法的绑定

带有“@Bind(R.id.xxx)” Butter Knife注解的域(或者叫字段),Butter Knife 会自动在布局中查找相应的视图。

1.Activity中的绑定

class ExampleActivity extends Activity {
  @Bind(R.id.title) TextView title;
  @Bind(R.id.subtitle) TextView subtitle;
  @Bind(R.id.footer) TextView footer;

  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.simple_activity);
    ButterKnife.bind(this);

  }
}
代码通过执行视图查找,来取代速度较慢的反射。调用绑定注解生成的代码你可以看到并且可以进行调试。
上面的例子所生成的代码大致相当于以下:
public void bind(ExampleActivity activity) {
  activity.subtitle = (android.widget.TextView) activity.findViewById(2130968578);
  activity.footer = (android.widget.TextView) activity.findViewById(2130968579);
  activity.title = (android.widget.TextView) activity.findViewById(2130968577);
}

2.资源绑定

通过预定义的注解(@BindBool, @BindColor, @BindDimen, @BindDrawable, @BindInt, @BindString)结合一个资源 ID以和表示该资源类型的相应的字段。
class ExampleActivity extends Activity {
  @BindString(R.string.title) String title;
  @BindDrawable(R.drawable.graphic) Drawable graphic;
  @BindColor(R.color.red) int red; 
  @BindDimen(R.dimen.spacer) Float spacer; 
  // ...
}

3.Fragment中的绑定

你还可以通过提供你自己的根视图来执行任意对象的绑定。
public class FancyFragment extends Fragment {
  @Bind(R.id.button1) Button button1;
  @Bind(R.id.button2) Button button2;

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fancy_fragment, container, false);
    ButterKnife.bind(this, view);
    return view;
  }
}

4.List适配器中的用法

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("测试");


    return view;
  }

  static class ViewHolder {
    @Bind(R.id.title) TextView name;
    @Bind(R.id.job_title) TextView jobTitle;

    public ViewHolder(View view) {
      ButterKnife.bind(this, view);
    }
  }
}
其他绑定API:
  1. 使用Activity为根视图绑定任意对象时,如果你使用类似MVC的设计模式你可以在Activity 调用ButterKnife.bind(this, activity),来绑定Controller。

    2.使用ButterKnife.bind(this)绑定一个view的子节点字段.如果你在子View的布局里或者自定义view的构造方法里使用了inflate,你可以立刻调用此方法。或者,从XML inflate来的自定义view类型可以在onFinishInflate回调方法中使用它。

5.View集合中的使用

你可以将多个view组成一个List或数组。
@Bind({ R.id.first_name, R.id.middle_name, R.id.last_name })
List<EditText> nameViews;
apply方法可以一次作用到所有的View。
ButterKnife.apply(nameViews, DISABLE);
ButterKnife.apply(nameViews, ENABLED, false);
Action 和 Setter 接口可以指定简单的行为。
static final ButterKnife.Action<View> DISABLE = new ButterKnife.Action<View>() {
  @Override public void apply(View view, int index) {
    view.setEnabled(false);
  }
};
static final ButterKnife.Setter<View, Boolean> ENABLED = new ButterKnife.Setter<View, Boolean>() {
  @Override public void set(View view, Boolean value, int index) {
    view.setEnabled(value);
  }
};
Android的Property(配置信息)也可以被用在apply方法中
ButterKnife.apply(nameViews, View.ALPHA, 0.0f);

6.监听器绑定

Butter knife可以自动将侦听器配置为方法。
@OnClick(R.id.submit)
public void submit(View view) {

}


@OnClick(R.id.submit)
public void submit() {

}
//定义的指定类型将会被自动转换

@OnClick(R.id.submit)
public void sayHi(Button button) {
  button.setText("Hello!");
}
指定多个id在一个单一的绑定事件中处理。
@OnClick({ R.id.door1, R.id.door2, R.id.door3 })
public void pickDoor(DoorView door) {
  if (door.hasPrizeBehind()) {
    Toast.makeText(this, "You win!", LENGTH_SHORT).show();
  } else {
    Toast.makeText(this, "Try again", LENGTH_SHORT).show();
  }
}
自定义View可以绑定自己的侦听器但是不用指定一个id。
public class MyButton extends Button {
  @OnClick
  public void onClick() {
  }
}

7.重置绑定

Fragment的生命周期与Activity不同,当我们在onCreateView绑定Fragment,在onDestroyView将View 设置为null时,Butter Knife 的 unbind()方法可以帮我们做这些。
public class FancyFragment extends Fragment {
  @Bind(R.id.button1) Button button1;
  @Bind(R.id.button2) Button button2;

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fancy_fragment, container, false);
    ButterKnife.bind(this, view);
    return view;
  }

  @Override public void onDestroyView() {
    super.onDestroyView();
    ButterKnife.unbind(this);
  }
}

8.可选绑定

默认情况下,”@Bind”和”@OnClick”(或者其他监听)监听绑定都是必需的。如果不能找到目标视图,则会引发异常。
为了制止这种行为,创建一个可选的结合,添加一个‘@Nullable’注解字段或方法。
任何名字为@Nullable的注解可以被这样使用。鼓励你使用Android自己的注解库”support-annotations”中的@Nullable注解,参见Android Tools Project.
@Nullable @Bind(R.id.might_not_be_there) TextView mightNotBeThere;

@Nullable @OnClick(R.id.maybe_missing) void onMaybeMissingClicked() {

}

9.多元监听

与方法注解相匹配的监听器有多个回调可以被用来绑定在他们中间的任何一个身上。每一个注解都有默认的回调跟它绑定在一起。可以使用callback参数声明一个可替代的回调。
@OnItemSelected(R.id.list_view)
void onItemSelected(int position) {

}

@OnItemSelected(value = R.id.maybe_missing, callback = NOTHING_SELECTED)
void onNothingSelected() {

}

10.在Android Studio 中配置

compile ‘com.jakewharton:butterknife:7.0.1’

11.代码混淆

在代码混淆的时候可能出问题,这时候需要在当前model下的proguard-rules.pro文件做如下修改:
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }

-keepclasseswithmembernames class * {
    @butterknife.* <fields>;
}

-keepclasseswithmembernames class * {
    @butterknife.* <methods>;
}
RK3568下MIPI屏幕调试技巧 通过合理配置设备树节点、精确计算像素时钟并完成编译烧录,可高效实现RK3568平台MIPI屏幕的点亮与显示调试。关键在于严格遵循屏幕规格书参数,结合内核日志定位问题,逐步优化时序配置。掌握这一流程后,开发者可快速适配不同分辨率、刷新率的MIPI屏幕,为嵌入式系统显示模块开发奠定基础。如果在调试中遇到特定问题(如驱动匹配失败、时钟计算误差),建议优先查阅屏幕规格书和RK3568芯片手册,或通过内核社区(如Linux-DRI邮件列表)获取支持。 阅读详情

相关推荐

BIM模型轻量化避坑指南:Revit导出GLTF常见问题及解决方案

本文深入探讨了BIM模型轻量化过程中,从Revit导出GLTF格式时遇到的常见问题与解决方案。针对文件体积膨胀、材质丢失、属性信息缺失等核心痛点,提供了从数据预处理、Draco几何压缩、纹理优化到Web端性能调优的全流程实战指南,帮助工程师高效实现BIM模型在WebGL环境中的流畅展示与交互。

wdx012345的博客 171

Butter Knife 使用方法

Butter Knife , Android 视图中field和方法的绑定带有“@Bind(R.id.xxx)” Butter Knife注解的域(或者叫字段),Butter Knife 会自动在布局中查找相应的视图。1.Activity中的绑定class ExampleActivity extends Activity { @Bind(R.id.title) TextView title;

李小冰的博客 3万+

TBtools的序列提取步骤

本教程详细介绍了如何使用TBtools软件从原来的FASTA序列中提取特定的DNA序列。

weixin_47509995的博客 1万+

ButterKnife v7.0.1的使用详解

ButterKnife的介绍   ButterKnife是一个支持View注入的框架。通常要写很多findViewById来初始化View对象,有了ButterKnife可以很轻松的省去这些步骤。ButterKnife是大神JakeWharton的力作,目前使用很广。最重要的一点,使用ButterKnife对性能基本没有损失,因为ButterKnife用到的注解并不是在运行时反射的,而是在编译的时候生

millerkevin 1214

避坑指南:Xilinx SelectIO IP核官方例程里那些容易忽略的细节(复位、时钟与数据回环)

本文深入解析Xilinx SelectIO IP核设计中复位策略、时钟域交互和数据回环验证三大关键领域的实战避坑技巧。针对官方例程中易被忽视的细节,如复位同步链深度、时钟相位约束和数据对齐机制,提供经过项目验证的优化方案,帮助工程师节省80%以上的调试时间。特别适用于FPGA开发中高速接口设计场景。

weixin_42561476的博客 447

超声相控阵合成孔径成像FPGA设计介绍

1.仿真预览 2.理论分析 系统的基本结构如下所示: 以上是实际中完整的结构,系统中会涉及到两块板子中的时钟,这个就是设计一个时钟采样同步的问题,即所谓的时钟同步。一般这种情况,往往使用内插的方式来解决。这是由于,在实际中,超生波接收到的信号是由本身系统发送出去反射回来得到的,因此从另外一方面将,其是同步的。但是在接收的时候通过内插的方法解决其中的延迟问题。 根据论文中的介绍,整个系统分为如下几个部分: ·模拟发送信号,这个部分由MATLAB产生测试数据并量...

FPGA/MATLAB学习教程/源码/项目合作开发 2069

Android Studio上方便使用butterknife注解框架的偷懒插件Android Butterknife Zelezny

首先提下ButterKnifey已经更新到版本7.0.1了,现在注解已经不叫@InjectView了,而叫@Bind,感觉更贴合语义。同时注册的方式也从 ButterKnife.inject(this); 变成了 ButterKnife.bind(this); 关于7.0.1的ButterKnife的各种用法和功能,可以参考ButterKnife的github上的主页:

Thik叮当 1921

【YOLOv8改进-注意力机制】LSKNet(Large Selective Kernel Network ):空间选择注意力

【YOLOv8改进-注意力机制】LSKNet(Large Selective Kernel Network ):空间选择注意力 (论文笔记+引入代码)。LSKNet能够动态调整其大的空间接收场,以更好地模拟遥感场景中各种对象的范围上下文。据我们所知,这是首次在遥感目标检测领域探索大型和选择性核机制。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 2864

androidstudio Butterknife-7.0.1的配置使用

androidstudio Butterknife-7.0.1的配置使用新出来的studioButterknife-7.0.1插件,因为电脑换了个系统重新配置了一下,这里自己做做笔记 首先添加Butterknife的jar包到项目中,如何把jar包添加到项目中参考http://www.jikexueyuan.com/blog/123.html 接下来在 build.gradle文件里面修改,记住

小曾同志的专栏 5343

迫零均衡前与迫零均衡后眼图对比附Matlab代码

迫零均衡(Decision Feedback Equalization,DFE)是一种常用的数字通信技术,用于抑制信号传输中的多径干扰。迫零均衡(Decision Feedback Equalization,DFE)是一种常用的数字通信技术,用于抑制信号传输中的多径干扰。眼图是一种常用的信号质量评估工具,通过绘制接收到的信号在时域上的波形,可以直观地观察到噪声、失真和干扰等问题。眼图是一种常用的信号质量评估工具,通过绘制接收到的信号在时域上的波形,可以直观地观察到噪声、失真和干扰等问题。

ByteSparkX的博客 459

在 SAP 中,寄售业务(Consignment)与管道业务(Pipeline)都属于“物料先到、发票后到”的特殊采购模式,但两者的库存形态、物权转移时点、结算触发条件、系统配置完全不同

SAP中寄售业务与管道业务均属"先货后票"采购模式,但存在本质差异。寄售业务(如手机芯片)采用实物库存管理(标记"K"),物权在领用时转移,通过411K/201K移动类型触发负债;管道业务(如蒸汽)无实物库存,采用261P等移动类型直接消耗并生成应付。系统配置上,寄售需K类信息记录及GR收货,管道需P类信息记录且免GR。两者均通过MRKO汇总结算,但寄售按领用量计费,管道按提取量实时计费。核心区别在于库存形态与物权转移时点。

金牌架构师 556

关于Android studio3.0的坑之butterknife 7.0.1(低版本)

关于Android studio3.0的坑之butterknife 7.0.1(低版本) 我们在AS3.0里面是无法直接使用butterknife 内库插件的,会报错,如下图: 接下来看看怎么设置呢?请看图: 添加如下一段话即可: javaCompileOptions { annotationProcessorOptions { includeCompi

xiayiye5的博客 2629

【毕设实战】飞行器目标识别系统:基于YOLOv5的智能检测全流程教程,助你毕设脱颖而出

本文介绍了一个基于YOLOv5的飞行器目标识别系统的开发过程。系统包含数据采集与标注、模型训练、实时检测和UI界面四大模块。文章详细讲解了从环境搭建、数据标注到YOLOv5模型训练的全流程,包括如何划分数据集、配置参数和测试模型性能。同时提供了实时检测代码示例和UI界面开发思路,使读者能够快速实现一个完整的智能检测系统。该系统可应用于军事侦察、民用巡检等领域,具有较高的实用价值,适合作为计算机视觉相关的毕业设计项目。

FJN110的博客 108

Android ButterKnife框架的使用方法

大家好!我是ACfun,我的昵称来自两个单词Accepted和fun。这篇博客记录一下如何在Android Studio开发环境中安装及使用ButterKnife注解框架。

晴空๓ 1610

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android Butterknife使用方法总结

Android Butterknife使用方法总结

hbsizw的专栏 200

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ButterKnife使用方法详解

介绍 ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象,有了ButterKnife可以很轻松的省去这些步骤。使用ButterKnife对性能基本没有损失,因为ButterKnife用到的注解并不是在运行时反射的,而是在编译的时候生成新的class。 GitHub地址:https://github.com/Jake...

孤独的冥王星 5万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ButterKnife的常用方法

今天写这篇文章的灵感是从之前写的 Android开发之用Bmob实现短信验证码功能 来的,记得当时看官方给的demo时,我注意到没有一大堆findViewById()的东西,而是在变量声明的时候加上注解,如: @InjectView(R.id.tv_title) TextView tv_title; 感觉这样很方便,就学习一下,以后写项目的时候也好用上。butterknife是一个支持Vi

talentclass_ctt的博客 3094

Android ButterKnife 使用方法总结

ButterKnife Introduction(介绍) ButterKnife 是一个专注于Android系统的View注入框架,可视化一键生成。 官网:http://jakewharton.github.io/butterknife/ GitHub:https://github.com/JakeWharton/butterknife/ 英: Eliminate findViewById calls by using @BindView on fields. Group m..

学习一定要有针对性的练习-实操! 974

Android Butterknife使用方法

前言: ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象,有了ButterKnife可以很轻松的省去这些步骤。是大神JakeWharton的力作,目前使用很广。最重要的一点,使用ButterKnife对性能基本没有损失,因为ButterKnife用到的注解并不是在运行时反射的,而是在编译的时候生成新的class。项...

weixin_42046829的博客 493

android butterknife 自定义view,Android Butterknife使用方法总结

前言:ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象,有了ButterKnife可以很轻松的省去这些步骤。是大神JakeWharton的力作,目前使用很广。最重要的一点,使用ButterKnife对性能基本没有损失,因为ButterKnife用到的注解并不是在运行时反射的,而是在编译的时候生成新的class。项目集...

weixin_35824806的博客 694

butterknife使用方法

Butter Knife , Android 视图中field和方法的绑定 带有“@Bind(R.id.xxx)” Butter Knife注解的域(或者叫字段),Butter Knife 会自动在布局中查找相应的视图。 1.Activity中的绑定 classExampleActi...

chunqingtai2922的博客 118

ButterKnife安装使用方法

面对无法在generate里面找到ButterKnife的问题的解决方法 首先得在bulid.gradle(:app)文件夹中加入以下字段 dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.constraintlayout:constrai

weixin_43378120的博客 386

ButterKnife使用方法

一.导入Butterknife 1.在app gradle里加入 dependencies { implementation 'com.jakewharton:butterknife:9.0.0-rc2' annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0-rc2' } 2.在项目 gradle加入: build...

neabea2016的博客 849

Android--Butterknife使用方法总结

一、简介 ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象,有了ButterKnife可以很轻松的省去这些步骤。 二、引入 1、在Project的 build.gradle 中添加如下代码: buildscript { repositories { mavenCentral() ...

超宇的博客 1761

简单的butterknife使用方法

主要是对 ButterKnife一些解释。感觉整理一下。好像思路清晰了一些。适合新手看。当然我也是新手。哈哈。第一次写博客。多多指教呀

Fighting_67的博客 1170

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

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

qq_32290639的博客 287
上一篇: git 上传本地文件到github
下一篇: 利 用 微信API将你的微信变为 聊天机器人
至鳟宝
博客等级 码龄10年 21粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值