butterknife源码解析需要解绑吗

AndroidStudio中使用ButterKnife注解 - 博客频道 - CSDN.NET
姿含的博客
世界对你好,因为你值得,偶尔欺负你,相信它是无意的。所有不快乐,是为了让你日后笑着说出来。
分类:依赖注入
在网上有看见这么叫的ButterKnife,也有看见BufferKnife这么叫的.对于菜鸟的我,早已mb.
那我们一起来看在AndroidStudio中如何使用这个偷懒插件Android Butterknife Zelezny
ButterKnife 优势:
1.强大的View绑定和Click事件处理功能,简化代码,提升开发效率
2.方便的处理Adapter里的ViewHolder绑定问题
3.运行时不会影响APP效率,使用配置方便
4.代码清晰,可读性强
使用心得:
1.Activity ButterKnife.bind(this);必须在setContentView();之后,且父类bind绑定后,子类不需要再bind
2.Fragment ButterKnife.bind(this, mRootView);
3.属性布局不能用private or static 修饰,否则会报错
4.setContentView()不能通过注解实现。(其他的有些注解框架可以)
一:创建一个新项目MyApplication
找到如下图所示图标Settings
输入ButterKnife 找到
安装插件,然后Restart你的AndroidStudio.
二:导入jar
找到如图所示
搜索&com.jakewharton:butterknife:8.0.1&
点击OK,耐心等待build......
然后在build.gradle中你会看到
三:做相应的配置
在build.gradle中添加代码:
apply plugin: 'android-apt'
apt 'com.jakewharton:butterknife-compiler:8.0.1'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
最后点击一下Sync
配置成功喽
四:如何调用ButterKnife
在你需要导入注解的Activity或者Fragment或者ViewHolder的layout资源代码上,右击,选择 Generate 然后 Generate ButterKnife Injections
这时候生成类似于下列的选择框:
Element为view的类型,ID为layout中资源的id名字,Variable
Name即为你在代码中引用出来的变量名,点击Confirm后即可。
写的很low...勿喷!
Departure_
排名:千里之外
(1)(2)(2)(2)(0)(2)(0)(0)(0)(0)Android 开源框架(1)
ButterKnife的介绍
ButterKnife是一个支持View注入的框架。通常要写很多findViewById来初始化View对象,有了ButterKnife可以很轻松的省去这些步骤。ButterKnife是大神JakeWharton的力作,目前使用很广。最重要的一点,使用ButterKnife对性能基本没有损失,因为ButterKnife用到的
注解并不是在运行时反射的,而是在编译的时候生成新的class。(XUtils的注入都是运行时反射,对性能影响很大。)ButterKnife目前的
最新版本是7.0.1。官方网址:http://jakewharton.github.io/butterknife/
&使用时应注意
Activity ButterKnife.bind(this);必须在setContentView();之后,且父类bind绑定后,子类不需要再bindFragment ButterKnife.bind(this, mRootView);属性布局不能用private or static 修饰,否则会报错setContentView()不能通过注解实现。(其他的有些注解框架可以)
使用方法:
& 如果使用Eclipse,可以去官网下载jar包导入
如果使用AndroidStudio可以直接在gradle中添加依赖 compile 'com.jakewharton:butterknife:7.0.1'
在Activity中绑定
import android.support.v7.app.AppCompatA
import android.os.B
import android.widget.B
import android.widget.TextV
import butterknife.B
import butterknife.ButterK
public class MainActivity extends AppCompatActivity{
//给指定的TextView绑定id
@Bind(R.id.tv)
//给指定的Button绑定id
@Bind(R.id.btn)
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
tv.setText(&哈哈&);
btn.setText(&呵呵呵&);
注意:需要绑定的控件不能是private和static的
&在Fragment中绑定
&pre name=&code& class=&java&&public class BlankFragment extends Fragment{
@Bind(R.id.f_tv)
TextView f_
@Bind(R.id.f_btn)
public BlankFragment(){
// Required empty public constructor
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
savedInstanceState){
View view=inflater.inflate(R.layout.fragment_blank, container, false);
ButterKnife.bind(this, view);
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);//解绑
在ViewHolder中绑定
&pre name=&code& class=&java&&
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.layout_list_item, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
holder = (ViewHolder) convertView.getTag();
holder.textview.setText(&item=====& + position);
return convertV
static class ViewHolder {
@Bind(R.id.hello_world)
public ViewHolder(View view) {
ButterKnife.bind(this, view);
注意:我们在ViewHolder中添加了一个有View参数的构造方法,以后再也不需要在getView方法中findViewById了
绑定事件回调方法
@OnClick({R.id.btn})
public void ok(){ //方法形参列表中可以有View也可以没有
Toast.makeText(this, &点击了Activity中的按钮&, Toast.LENGTH_SHORT).show();
也可以多个View控件的点击事件绑定在一个方法中。
除了点击事件@OnClick,还有ListView的点击@OnItemClick, CheckBox的@OnCheckedChanged等等.
&ButterKnife一些其他常用方法
1、解除绑定
protected void onDestroy(){
super.onDestroy();
即把上面绑定的view全部置为null
ButterKnife.unbind(this);
2、选择性绑定。
默认情况下绑定View和事件的时候,控件的id是必须存在的,否则会抛出异常。
选择性绑定可以做到如果id存在就绑定,否则不绑定,不抛出任何异常。
想达到这样的想过只需要在@bind 或@onClick前添加@null即可
@Nullable @Bind(R.id.f_tv)
3、多方法绑定
@OnItemSelected(R.id.list_view)
void onItemSelected(int position) {
// TODO ...
@OnItemSelected(value = R.id.maybe_missing, callback = NOTHING_SELECTED)
void onNothingSelected() {
// TODO ...
4、findById方法。以前我们调用findViewById需要进行强制类型转换。使用它可以免除强制类型转换,可以自动完成类型转换。
View view = LayoutInflater.from(context).inflate(R.layout.thing, null);
TextView firstName = ButterKnife.findById(view, R.id.first_name);
TextView lastName = ButterKnife.findById(view, R.id.last_name);
ImageView photo = ButterKnife.findById(view, R.id.photo);
Android Studio 中Zelezny插件的使用
在AndroidStudio-&File-&Settings-&Plugins-&搜索Zelezny下载添加就行 ,可以快速生成对应组件的实例对象,不用手动写。使用时,在要导入注解的Activity 或 Fragment 或 ViewHolder的layout资源代码上,右键——&Generate——Generate ButterKnife Injections,然后就出现如图的选择框。(此动态图来自官网)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:288次
排名:千里之外
(1)(1)(2)(1)(2)开源注解框架ButterKnife的使用 - 推酷
开源注解框架ButterKnife的使用
在Android开发中,有没有对你每次无尽的findViewById感到厌烦?有没有也曾想过如果有像Web开发一样强大的注解框架,只需注解一下什么都搞定?那好,就来看看我们今天所要说的Android注解框架-Butter Knife
使用AndroidStudio的同学可以直接
compile 'com.jakewharton:butterknife:7.0.1'
在重新Build一下项目即可,使用Eclipse的同学那就需要把jar包下载下来了,下面给出下载地址
ButterKnife的特点
来让你摆脱
findViewById
可以将一组视图添加到集合里,对它们所有的操作都可以通过
actions,setters,properties
和其他的一些注解让你摆脱一些监听的匿名内部类
使用资源注解摆脱资源查找的繁琐
ButterKnife使用详解
和控件ID就可以自动找到相应的视图布局
class ExampleActivity extends Activity {
@Bind(R.id.title) TextView
@Bind(R.id.subtitle) TextView
@Bind(R.id.footer) TextView
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
// 使用bind方法绑定视图
ButterKnife.bind(this);
// TODO Use fields...
执行上面的代码其实就是生成了我们以前写的findViewById来执行查询,而不是用反射这种缓慢的方式。生成的代码大致相当于下
public void bind(ExampleActivity activity) {
activity.subtitle = (android.widget.TextView) activity.findViewById();
activity.footer = (android.widget.TextView) activity.findViewById();
activity.title = (android.widget.TextView) activity.findViewById();}
除了上面的绑定方式,我们还可以绑定自定义的视图
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);
// TODO Use fields...
我们还可以在ViewHolder里面使用来简化Adapter
public class MyAdapter extends BaseAdapter {
public View getView(int position, View view, ViewGroup parent) {
ViewHolder
if (view != null) {
holder = (ViewHolder) view.getTag();
view = inflater.inflate(R.layout.whatever, parent, false);
holder = new ViewHolder(view);
view.setTag(holder);
holder.name.setText(&John Doe&);
static class ViewHolder {
@Bind(R.id.title) TextView
@Bind(R.id.job_title) TextView jobT
public ViewHolder(View view) {
ButterKnife.bind(this, view);
监听事件绑定
自动的为控件自定义的点击事件方法
@OnClick(R.id.submit)public void submit() {
// TODO submit data to server...}
自定义的方法可以传入任意的参数
@OnClick(R.id.submit)public void sayHi(Button button) {
button.setText(&Hello!&);}
也可以将多个控件绑定在同一个自定义的点击事件方法
@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();
Toast.makeText(this, &Try again&, LENGTH_SHORT).show();
自定义控件绑定自己的监听事件的时候可以不指定ID
public class FancyButton extends Button {
public void onClick() {
// TODO do something!
对Fragment的特殊处理
由于Fragment的生命周期和Activity的是有点不同的,我们在
onCreateView
中绑定了视图,当Fragment的
onDestroyView
被调用时,视图将会被设置为空,我们可以调用ButterKnife的
方法解除视图的绑定。
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);
// TODO Use fields...
@Override public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
直接使用ButterKnife的静态方法来简化findViewById
View view = LayoutInflater.from(context).inflate(R.layout.thing, null);TextView firstName = ButterKnife.findById(view, R.id.first_name);TextView lastName = ButterKnife.findById(view, R.id.last_name);ImageView photo = ButterKnife.findById(view, R.id.photo);
关于ButterKnife的介绍就到这里了,以上内容大多基于官网修改。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致Eclipse&使用Butter&Knife注解工具
Android&视图注解工具
1、使用之前首先需要进行Eclipse设置
2、基本操作
@Bind(R.id.XXX)绑定id,等同于findViewById(R.id.xxx)
@BindColor(R.color.xxx)
@BindDrawable(R.drawable.xxx)
参考示例:
class ExampleActivity extends Activity {
@Bind(R.id.title) TextV
@Bind(R.id.subtitle) TextV
@Bind(R.id.footer) TextV
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
ButterKnife.bind(this);
// TODO Use fields...
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 butterknife源码解析 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信