ButterKnife 8.5.1 新版本使用方法

为什么要用ButterKnife?
方便处理View绑定和Click事件,简化代码,提升开发效率。

1. 引用依赖

  • 找到自己项目的build.gradle(Modul: app) 并添加
dependencies{
  compile 'com.jakewharton:butterknife:8.5.1'
  annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
}

2 添加插件

  • 添加插件 ButterKnife,选择 Zelezny
    (主要用于快捷生成注解)

  • 2-1 点击File => Setting打开设置

  • 2-2 选择plugins(插件),并在下方选择Browse repositories(民间插件)
    (下面3个按钮分别代表 官方、民间、本地的插件,我们这里选择第2个)

ButterKnife 8.5.1 新版本使用方法_第1张图片
  • 2-3 输入Zelezny,点击右侧安装即可,很明显第一个就是我们需要的插件,点击安装后,可能会提示重启AS,点击OK即可
    ButterKnife 8.5.1 新版本使用方法_第2张图片

3 使用

  • 3-1 在Activity中使用
    在ActivityonCreate() 中setContentView下面添加(可以放在BaseActivity中)
  setContentView(R.layout.activity_main);
  //绑定butterknife
  ButterKnife.bind(this);
  • 3-2 在Fragment中使用
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_butterknife, container, false);
        //绑定fragment
        ButterKnife.bind( this , view ) ;
        return view ;
    }
  • 3-3 绑定单个、多个View
  @BindView(R.id.tv)
  TextView tv;
    @BindViews({ R.id.button1  , R.id.button2 ,  R.id.button3 })
    public List

相当于TextView tv = findViewById(R.id.tv)

  • 3-5 绑定资源

@BindString() :绑定string 字符串
@BindArray() : 绑定string里面array数组
@BindBitmap( ) : 绑定Bitmap 资源
@BindColor( ) : 绑定一个颜色值

    @BindString( R.string.app_name )  //绑定string 字符串
    String meg;
    @BindArray(R.array.city )  //绑定string里面array数组,要预先准备好数组
    String [] citys ;
    @BindBitmap( R.mipmap.wifi )  //绑定Bitmap 资源
    public Bitmap wifi_bitmap ;
    @BindColor( R.color.colorAccent )  //绑定一个颜色值
    int black ; 
  • 3-6 绑定单个、多个View点击事件 (长按事件)
    @OnClick(R.id.btn)
    public void onBtnClicked() {}

    @OnClick({ R.id.tv_text1, R.id.tv_text2, R.id.tv_text3, R.id.tv_text4 })  
    public void onBtnClicked() {}

    @OnLongClick( R.id.button1 )    
    public void onLongClicked() {}

相当于省略了给每个View设置setOnclickListener

  • 3-7 Adapter中的使用

在ViewHolder里首先绑定控件,然后新建构造方法,接受传过来的View
此外,item里面Button控件的点击事件也可以使用注解@OnClick来实现

>传统ListView的Adapter:
其实只需要注意 holder = new ViewHolder(convertView); 即可

public class TestAdapter extends BaseAdapter {  
    private List list;  
    private Context context;  

    public TestAdapter(Context context, List list) {  
        this.list = list;  
        this.context = context;  
    }  

    @Override  
    public int getCount() {  
        return list==null ? 0 : list.size();  
    }  

    @Override  
    public Object getItem(int position) {  
        return list.get(position);  
    }  

    @Override  
    public long getItemId(int position) {  
        return position;  
    }  

    @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();  
        }  
        //item的button的点击事件
        @OnClick(R.id.hello_world)
        public void onClick(){
            Toast.makeText(context,"点击了按钮",Toast.LENGTH_SHORT).show();
        }
        return convertView;  
    }  

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

        public ViewHolder(View view) {  
            ButterKnife.bind(this, view);  
        }  
    }  
}

> RecyclerView的Adapter:

    @Override  
    public MainHodler onCreateViewHolder(ViewGroup parent, int viewType) {  
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_main, parent, false);  
        return new MainHodler(view);  
    }  

4 自动生成快捷键

  • 若在Activity中,鼠标移至布局文件
    使用快捷键 Alt+Insert,再选择Butterknife Injections自动生成
ButterKnife 8.5.1 新版本使用方法_第3张图片
  • 可以看到布局中定义的控件都会被绑定
    我们可以自由绑定、更改变量名、以及设置onClick
    ButterKnife 8.5.1 新版本使用方法_第4张图片

5 使用注意

1.Activity ButterKnife.bind(this);必须在setContentView();之后,且父类bind绑定后,子类不需要再bind
2.Fragment ButterKnife.bind(this, mRootView);
3.属性布局不能用private or static 修饰,否则会报错

6 致谢:

参考文章
https://www.cnblogs.com/Westfalen/p/6742946.html
http://www.jianshu.com/p/63e1690c83e5
http://blog.csdn.net/zhuhai__yizhi/article/details/50777067

你可能感兴趣的:(ButterKnife 8.5.1 新版本使用方法)