美文网首页
ButterKnife

ButterKnife

作者: Mr_不靠谱_先森 | 来源:发表于2017-02-23 16:48 被阅读62次

    ButterKnife是一个注解框架,一般在绑定View的时候使用。不得不说,这个框架"有毒",用了就上瘾,连写个Demo都要去导这个库。大多数同学都用过ButterKnife,可能好多人都停留在findViewById()上。我想说,确实不只是有findViewById()这个功能。不得不承认,在这之前,我对ButterKnife的使用,也只停留在绑定视图和点击事件上。

    AndroidAnnotation(AA)与ButterKnife的比较

    • 首先从功能上来说,AA提供的注解数量远多于ButterKnife,功能也是无所不包(View的绑定,线程,监听,动画,balabala...)而ButterKnife仅仅提供针对View的注解。
    • 其次从两类框架的实现流程上来说,AA在一开始就已经生成了新的代码XXXActivity_,后续的执行都是依赖于新的代码。生成的方法和代码量较多。ButterKnife在编译时也是会生成新的中间工具类,代码量相对于AA来说略少,但是新增了类文件。并且,在运行时,需要通过一点点反射的技术来实现整体的逻辑。
    • 第三,从上手成都上来说,AA的前期工作略麻烦一些,并且后期需要手动修改类名(XXX的后面加上下划线)ButterKnife则需要在类中添加ButterKnife.Bind方法来使用绑定功能。AA稍微麻烦一丢丢。

    使用方法:

    Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png Paste_Image.png

    常用的几个注解

    Butterknife支持Activity,Fragment,View,Dialog,ViewHolder类内部的View绑定
    
    
    @Bind
    TextView mTextView//最常用的注解,用来绑定View,避免findViewById,也可以用在ViewHolder里,必须是public
    
    @Bind({ R.id.first_name, R.id.middle_name, R.id.last_name })
    List<EditText> nameViews//绑定多个view,只能用List不能用ArrayList
    
    @OnClick(R.id.submit)
    public void submit(View view) {...}//绑定点击事件,支持多个id绑定同一个方法
    
    @OnItemSelected(R.id.list_view)
    void onItemSelected(int position) {...}//selected事件
    
    @OnItemClick(R.id.example_list) 
    void onItemClick(int position) {...}//itemClick事件
    
    @OnFocusChange(R.id.example) 
    void onFocusChanged(boolean focused){...}//焦点改变监听
    
    @OnItemLongClick(R.id.example_list) 
    boolean onItemLongClick(int position){...}//长按监听
    
    @OnPageChange(R.id.example_pager) 
    void onPageSelected(int position){...}//Viewpager切换监听
    
    @OnTextChanged(R.id.example) 
    void onTextChanged(CharSequence text)//内容改变监听
    
    @BindInt//用来绑定Integer类型的resource ID
    @BindString//用来绑定string.xml里的字符串
    @BindDrawable//用来绑定图片
    @BindColor//用来绑定颜色
    @BindDimen//用来绑定dimens
    

    几点有关ButterKnife的提示,使用时避免踩坑。

    • Activity: ButterKnife.bind(this);
    • 必须在setContentView();之后,且父类bind绑定后,子类不需要再bind
    • Fragment :ButterKnife.bind(this, mRootView);
    • 属性布局不能用private 或static 修饰,否则会报错
    • setContentView()不能通过注解实现。
    • ButterKnife已经更新到版本8.x了,以前的版本中叫做@InjectView,7.x中叫@Bind,而现 在改用叫@BindView。

    相关文章

      网友评论

          本文标题:ButterKnife

          本文链接:https://www.haomeiwen.com/subject/ibjbwttx.html