ButterKnife注解框架使用

Butter Knife
Field and method binding for Android views

Butter Knife采用annotation(注解)的方式帮你去绑定变量。而不是采用findViewById的方式.

举个简单例
第一步:下载ButterKnife开发包,下载地址如下:
下载地址

第二步:配置开发工具,我暂时用的是eclipse,将下载的ButterKnife开发包放到工程的libs下面
这里写图片描述
配置Annotation Processing,这里配置是导入实现了AbstractProcessor接口的包,编译的时候自动执行该接口下的process(),一般在次函数做一些注解解释操作。
这里写图片描述
add jars将libs下的butterKnife.jar包加进去
这里写图片描述

第三步:编程实现
activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.csm.butterknife.MainActivity" >

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

MainActivity

package com.csm.butterknife;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class MainActivity extends Activity {
    /**
     * 注解的View对象
     */
    @Bind(R.id.tv_title)
    TextView tv_title;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /**
         * 注解初始化
         */
        ButterKnife.bind(this);
        tv_title.setText("Hello Annotations");
    }

    @OnClick(R.id.tv_title)
    public void Hello() {
        Toast.makeText(this, "Hello Annotations", Toast.LENGTH_LONG).show();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ButterKnife.unbind(this);
    }

    /**
     * 打印处输入的内容
     * @param str
     * @return
     */
    private String print(String str) {
        System.out.println(str);
        return str != null ? str:"";
    }
}

第四步:编译的时候会生成文件MainActivity$$ViewBinder类,其实在运行时执行ButterKnife.bind(this)的时候就是执行了下面的文件的bind方法。实现了最终的绑定。所以绑定还是运行时的,但是注解解释是在编译期的。
这里写图片描述
注解生成辅助文件内容:

// Generated code from Butter Knife. Do not modify!
package com.csm.butterknife;

import android.view.View;
import butterknife.ButterKnife.Finder;
import butterknife.ButterKnife.ViewBinder;

public class MainActivity$$ViewBinder<T extends com.csm.butterknife.MainActivity> implements ViewBinder<T> {
  @Override public void bind(final Finder finder, final T target, Object source) {
    View view;
    view = finder.findRequiredView(source, 2131296319, "field 'tv_title' and method 'Hello'");
    target.tv_title = finder.castView(view, 2131296319, "field 'tv_title'");
    view.setOnClickListener(
      new butterknife.internal.DebouncingOnClickListener() {
        @Override public void doClick(
          android.view.View p0
        ) {
          target.Hello();
        }
      });
  }

  @Override public void unbind(T target) {
    target.tv_title = null;
  }
}

第五步:运行效果
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值