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);
}
}
}