ButterKnife

简介:

在android系统中,利用java注解自动生成view相关的代码,从而减少view相关代码的编写。(简言之就是可以让程序员偷懒的工具)

项目地址:

https://github.com/JakeWharton/butterknife

项目主页:

http://jakewharton.github.io/butterknife/

ButterKnife 优势:

1.强大的View绑定和Click事件处理功能,简化代码,提升开发效率

2.方便的处理Adapter里的ViewHolder绑定问题

3.运行时不会影响APP效率,使用配置方便

4.代码清晰,可读性强

gradle配置:

在project下的build.gradle中加入

dependencies {
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }

在app文件夹下的build.gradle中加入

apply plugin: 'android-apt'

dependencies{
    compile 'com.jakewharton:butterknife:8.2.1'
    apt 'com.jakewharton:butterknife-compiler:8.2.1'
}

使用举例

1.在activity中

package gift.witch.exercise;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

import butterknife.BindString;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;

public class KMainActivity extends Activity{

    /**
     * 绑定View
     */
    @BindView(R.id.textview)
    TextView mTextView;

    /**
     * 绑定资源
     *
     * @BindString()
     * @BindColor()
     * @BindDrawable()
     * @BindDimen()
     * ...
     * @BindBool()
     *
     */
    @BindString(R.string.app_name)
    String mAppname;

    /**
     * 绑定事件
     * @OnItemSelected()
     * @OnTextChanged()
     * ....
     * @OnItemLongClick()
     */
    @OnClick(R.id.button)
    public void onButton(){
    }

    private Unbinder mUnbinder;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_kmain);
        mTextView.setText(mAppname);
        mUnbinder = ButterKnife.bind(this);
    }

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

2.在fragment中

package gift.witch.exercise;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

import java.util.List;

import butterknife.BindViews;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;

public class KFragment extends Fragment {

    /**
     * 绑定多个view
     * 注意:是@BindViews不是@BindView
     */
    @BindViews({R.id.button1, R.id.button2, R.id.button3})
    List<Button> mButtonList;

    /**
     * 绑定事件
     */
    @OnClick({R.id.button1,R.id.button2,R.id.button3})
    public void doButton(View v){
    }

    private Unbinder mUnbinder;

    @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.k_fragment, container, false);
        mUnbinder = ButterKnife.bind(this, view);
        return view;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        mUnbinder.unbind();
    }
}

2.在adapter中

package gift.witch.exercise;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import butterknife.BindView;
import butterknife.ButterKnife;

public class KAdapter extends BaseAdapter {

    private Context mContext;

    public KAdapter(Context context){
        mContext = context;
    }

    @Override
    public int getCount() {
        return 0;
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.k_adapter, null);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.mTextview.setText("XXX");
        return convertView;
    }

    static class ViewHolder {

        @BindView(R.id.textview)
        TextView mTextview;

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

相关的文章

深入理解 ButterKnife,让你的程序学会写代码

1.使用8.5.1版本时

results matching ""

    No results matching ""