ButterKnife注解框架使用

来源:互联网 发布:java开源考试系统 编辑:程序博客网 时间:2024/05/16 02:01

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
原创粉丝点击