ButterKnife的使用详解

来源:互联网 发布:下载软件管理 编辑:程序博客网 时间:2024/05/01 01:19

ButterKnife的介绍

ButterKnife是一个支持View注入的框架。通常要写很多findViewById来初始化View对象,有了ButterKnife可以很轻松的省去这些步骤。ButterKnife是大神JakeWharton的力作,目前使用很广。最重要的一点,使用ButterKnife对性能基本没有损失,因为ButterKnife用到的

注解并不是在运行时反射的,而是在编译的时候生成新的class。(XUtils的注入都是运行时反射,对性能影响很大。)ButterKnife目前的

最新版本是7.0.1。官方网址:http://jakewharton.github.io/butterknife/

 使用时应注意

  1. Activity ButterKnife.bind(this);必须在setContentView();之后,且父类bind绑定后,子类不需要再bind
  2. Fragment ButterKnife.bind(this, mRootView);
  3. 属性布局不能用private or static 修饰,否则会报错
  4. setContentView()不能通过注解实现。(其他的有些注解框架可以)

使用方法:

  1.   如果使用Eclipse,可以去官网下载jar包导入
  2. 如果使用AndroidStudio可以直接在gradle中添加依赖 compile 'com.jakewharton:butterknife:7.0.1'

在Activity中绑定

import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.Button;import android.widget.TextView;  import butterknife.Bind;import butterknife.ButterKnife;  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);

Android Studio 中Zelezny插件的使用

在AndroidStudio->File->Settings->Plugins->搜索Zelezny下载添加就行 ,可以快速生成对应组件的实例对象,不用手动写。使用时,在要导入注解的Activity 或 Fragment 或 ViewHolder的layout资源代码上,右键——>Generate——Generate ButterKnife Injections,然后就出现如图的选择框。(此动态图来自官网)










0 0
原创粉丝点击