ButterKnife v7.0.1的使用详解

本文详细介绍了ButterKnife v7.0.1的使用,包括在Activity、Fragment和ViewHolder中的绑定,事件回调方法的设置,以及如何在Android Studio中使用Zelezny插件进行快捷生成。ButterKnife简化了视图查找,提高了代码的可读性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ButterKnife的介绍

  ButterKnife是一个支持View注入的框架。通常要写很多findViewById来初始化View对象,有了ButterKnife可以很轻松的省去这些步骤。ButterKnife是大神JakeWharton的力作,目前使用很广。最重要的一点,使用ButterKnife对性能基本没有损失,因为ButterKnife用到的注解并不是在运行时反射的,而是在编译的时候生成新的class。本文中ButterKnife的版本是v7.0.1。官方网址:http://jakewharton.github.io/butterknife/

使用时应注意
  • Activity ButterKnife.bind(this);必须在setContentView();之后,且父类bind绑定后,子类不需要再bind
  • Fragment ButterKnife.bind(this, mRootView);
  • 属性布局不能用private or static 修饰,否则会报错
  • setContentView()不能通过注解实现。(其他的有些注解框架可以)
使用方法:
  1. 如果使用Eclipse,可以去官网下载jar包导入
  2. 如果使用AndroidStudio可以直接在gradle中添加依赖 compile 'com.jakewharton:butterknife:7.0.1'
在Activity中绑定
public class MainActivity extends AppCompatActivity{
    //给指定的TextView绑定id
    @Bind(R.id.tv)
    TextView tv;
    //给指定的Button绑定id
    @Bind(R.id.btn)
    Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         ButterKnife.bind(this);
         tv.setText("哈哈");
         btn.setText("呵呵呵");
    }
}

注意:需要绑定的控件不能是private和static的

在Fragment中绑定
public class BlankFragment extends Fragment{
    @Bind(R.id.f_tv)
    TextView f_tv;

    @Bind(R.id.f_btn)
    Button f_btn;

    public BlankFragment(){
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
            savedInstanceState){
      View view=inflater.inflate(R.layout.fragment_blank, container, false);
      ButterKnife.bind(this, view);
        return view;
    }
    @Override
    public void onDestroyView() {
        super.onDestroyView();
        ButterKnife.unbind(this);//解绑
    }
}
在ViewHolder中绑定
     @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.layout_list_item, null);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.textview.setText("item=====" + position);
        return convertView;
    }

    static class ViewHolder {
        @Bind(R.id.hello_world)
        TextView textview;

        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、解除绑定
@Override
  protected void onDestroy(){
    super.onDestroy();
    //解绑。  即把上面绑定的view全部置为null
    ButterKnife.unbind(this);

  }

2、选择性绑定。
默认情况下绑定View和事件的时候,控件的id是必须存在的,否则会抛出异常。  选择性绑定可以做到如果id存在就绑定,否则不绑定,不抛出任何异常。  想达到这样的想过只需要在@bind@onClick前添加@null即可

@Nullable @Bind(R.id.f_tv)
TextView 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);
AndroidStudio 中Zelezny插件的使用

使用此插件让butterknife用起来更加方便,在AndroidStudio->File->Settings->Plugins->搜索Zelezny下载添加就行 ,可以快速生成对应组件的实例对象,不用手动写。使用时,在要导入注解的Activity 或 Fragment 或 ViewHolder的layout资源代码上,右键——>Generate——Generate ButterKnife Injections,然后就出现如图的选择框。下图为操作过程:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值