频道栏目
首页 > 程序开发 > 移动开发 > 其他 > 正文
ButterKnife v7.0.1的使用详解
2017-04-17 09:49:27         来源:MillerKevin  
收藏   我要投稿

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()不能通过注解实现。(其他的有些注解框架可以)

使用方法:

如果使用Eclipse,可以去官网下载jar包导入 如果使用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,然后就出现如图的选择框。下图为操作过程:

这里写图片描述

点击复制链接 与好友分享!回本站首页
上一篇:PopupWindow的显示
下一篇:教你实现最简单的QQ消息item侧滑菜单
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站