配置
项目的build.gradle
dependencies {
classpath 'com.android.tools.build:gradle:2.2.2'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
app/build.gradle
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
android{
...
}
dependencies{
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.0.1'
testCompile 'junit:junit:4.12'
//ButterKnife
compile 'com.jakewharton:butterknife:8.4.0'
apt 'com.jakewharton:butterknife-compiler:8.4.0'
}
使用
id与资源
BindView
//单个id注解
@BindView(R.id.btn_first)
Button mFirstBtn;
@BindView(R.id.listview)
ListView listView;
BindViews
//多个id注解
@BindViews({R.id.tv_first, R.id.tv_second, R.id.tv_third})
List<TextView> tvList;
BindString
//绑定string
@BindString(R.string.butterknife)
String str;
BindArray
//绑定array
@BindArray(R.array.cities)
String[] arrays;
BindColor
//绑定color
@BindColor(R.color.white)
int textColor;
BindBitMap
//绑定Bitmap
@BindBitmap(R.mipmap.head_round)
Bitmap bitmap;
绑定bind
Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
initListView();
}
Fragment
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fram_layout, container, false);
ButterKnife.bind(this, view);
setText();
imageView.setImageBitmap(bitmap);//绑定Bitmap
return view;
}
ViewHolder
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder holder;
if(view == null)
{
view = LayoutInflater.from(context).inflate(R.layout.list_item, null);
holder = new ViewHolder(view);
view.setTag(holder);
}
else
{
holder = (ViewHolder)view.getTag();
}
holder.imageView.setImageResource(list.get(i).getImg());
holder.textView.setText(list.get(i).getText());
return view;
}
//Adapter ViewHolder绑定
class ViewHolder{
@BindView(R.id.tv_item)
TextView textView;
@BindView(R.id.iv_item)
ImageView imageView;
public ViewHolder(View view)
{
ButterKnife.bind(this, view);
}
}
解绑
//解除绑定
private Unbinder unbinder;
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();//解除绑定
}
监听事件
OnClick
//单个id 监听事件
@OnClick(R.id.btn_first)
public void bindViewBtn(Button btn) {
for (TextView tv : tvList) {
tv.setText("ButterKnife");
}
}
//多个id监听事件
@OnClick({R.id.btn_second, R.id.btn_fragment})
public void clicks(Button btn) {
switch (btn.getId()) {
case R.id.btn_second:
showToast(btn.getText().toString());
break;
case R.id.btn_fragment:
openFragment();
break;
default:
break;
}
}
OnLongClick
//绑定长按监听事件
@OnLongClick(R.id.btn_first)
public boolean longClick() {
showToast("绑定长按监听事件");
return true;
}
OnItemClick
//OnItemClick绑定
@OnItemClick(R.id.listview)
public void itemClick() {
showToast("OnItemClick绑定");
}
OnItemLongClick
//OnItemLongClick绑定
@OnItemLongClick(R.id.listview)
public boolean itemLongClick() {
showToast("OnItemLongClick绑定");
return true;
}
代码
package com.example.zmant.butterknifedemo;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindString;
import butterknife.BindView;
import butterknife.BindViews;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.OnItemClick;
import butterknife.OnItemLongClick;
import butterknife.OnLongClick;
public class MainActivity extends AppCompatActivity {
//单个id注解
@BindView(R.id.btn_first)
Button mFirstBtn;
@BindView(R.id.listview)
ListView listView;
List<Bean> beans;
ListAdapter adapter;
//多个id注解
@BindViews({R.id.tv_first, R.id.tv_second, R.id.tv_third})
List<TextView> tvList;
//绑定string
@BindString(R.string.butterknife)
String str;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
initListView();
}
//OnItemClick绑定
@OnItemClick(R.id.listview)
public void itemClick() {
showToast("OnItemClick绑定");
}
//OnItemLongClick绑定
@OnItemLongClick(R.id.listview)
public boolean itemLongClick() {
showToast("OnItemLongClick绑定");
return true;
}
/**
* 初始化ListView
*/
private void initListView() {
initBeans();
adapter = new ListAdapter(this, beans);
listView.setAdapter(adapter);
}
/**
* 初始化listView所需的数据
*/
private void initBeans() {
beans = new ArrayList<>();
for (int i = 0; i < 5; i++) {
beans.add(new Bean(str, R.mipmap.head_round));
}
}
//单个id 监听事件
@OnClick(R.id.btn_first)
public void bindViewBtn(Button btn) {
for (TextView tv : tvList) {
tv.setText("ButterKnife");
}
}
//多个id监听事件
@OnClick({R.id.btn_second, R.id.btn_fragment})
public void clicks(Button btn) {
switch (btn.getId()) {
case R.id.btn_second:
showToast(btn.getText().toString());
break;
case R.id.btn_fragment:
openFragment();
break;
default:
break;
}
}
//绑定长按监听事件
@OnLongClick(R.id.btn_first)
public boolean longClick() {
showToast("绑定长按监听事件");
return true;
}
//动态加入Fragment
private void openFragment() {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
FragmentTest fragment = new FragmentTest();
transaction.add(R.id.frame_container, fragment);
transaction.commit();
}
//Toast
private void showToast(String str) {
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
}
}
package com.example.zmant.butterknifedemo;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import butterknife.BindArray;
import butterknife.BindBitmap;
import butterknife.BindColor;
import butterknife.BindString;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
/**
* @author zmant 2016/12/6 21:56
* @classname FragmentTest
* @description Fragmeny中ButterKnife的使用
*/
public class FragmentTest extends Fragment{
@BindView(R.id.tv_fragment)
TextView textView;
@BindView(R.id.iv_fragment)
ImageView imageView;
//绑定string字符串
@BindString(R.string.butterknife)
String str;
//绑定array
@BindArray(R.array.cities)
String[] arrays;
//绑定color
@BindColor(R.color.white)
int textColor;
//绑定Bitmap
@BindBitmap(R.mipmap.head_round)
Bitmap bitmap;
//解除绑定
private Unbinder unbinder;
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();//解除绑定
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fram_layout, container, false);
ButterKnife.bind(this, view);
setText();
imageView.setImageBitmap(bitmap);//绑定Bitmap
return view;
}
private void setText()
{
textView.setTextColor(textColor);//绑定color
// textView.setText(str); //绑定string字符串
String result = "";
for(String s : arrays)//绑定array
{
result += s + "\n";
}
textView.setText(result);
}
}