每天还为findviewbyid()苦恼吗?一个解决findViewById()的神奇插件出现了,
我们之前使用Xutils时,会听说过注解,今天我为大家讲解另外一个。如何使用,减轻代码工作量,让代码更优雅。
1简介
Butterknife是注解中相对简单易懂的很不错的开源框架
1)强大的view绑定和点击事件的处理功能,简化代码,提升开发效率
2)方便的处理Adapter 里的ViewHolder绑定问题
3)运行时不会影响APP效率,使用配置方便
4)代码清晰 可读性强
3.使用步骤:
1.在Setting——plugins中输入Butterknifer添加插件 Android ButterKnife Aelezny ->点击安装
2,Module里的Build.gradle里面添加 compile 'com.jakewharton:butterknife:7.0.1'
4.常见功能:
主要针对7.0.1版本
1)省略findviewbyid()1.在Activity中使用:
以前
mTextView1 = (TextView) findViewById(R.id.butter_text_view_1);
现在
@InjectView(R.id.butter_text_view_2)
TextView mTextView2;
在设置好布局之后调用:ButterKnife.inject(this);:
注意
View变量声明的时候不能为private或者static.
View view = inflater.inflate(R.layout.fragment_simple, container, false);
ButterKnife.inject(this, view);
2)在Fragement中使用:
View view = inflater.inflate(R.layout.fragment_simple, container, false);
ButterKnife.inject(this, view);
@InjectView(R.id.fragment_text_view)
TextView mTextView;
mTextView.setText("TextView in Fragment are found!");
3)在Adapter viewHolder中使用:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.person_item_layout, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Person person = getItem(position);
if (null != person) {
holder.name.setText(person.getName());
holder.age.setText(String.valueOf(person.getAge()));
holder.location.setText(person.getLocation());
holder.work.setText(person.getWork());
}
return convertView;
}
static class ViewHolder {
@InjectView(R.id.person_name)
TextView name;
@InjectView(R.id.person_age)
TextView age;
@InjectView(R.id.person_location)
TextView location;
@InjectView(R.id.person_work)
TextView work;
public ViewHolder(View view) {
ButterKnife.inject(this, view);
}
}
2 省略setOnClickListener()
以前
finishButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
现在
@OnClick(R.id.basic_finish_a_button)
void finishA(View view) {
finish();
}
ButterKnife.inject(this);
注意:
注意这里方法仍然不能是private和static, 并且可以有一个参数View,也可不写
3)ListView的点击@OnItemClick, CheckBox的@OnCheckedChanged也可以实现省略操作
4)可以一次指定多个id,为多个View绑定一个事件处理方法
@OnClick({R.id.button_enable, R.id.button_disable, R.id.button_alpha_0, R.id.button_alpha_1})
void editViewsClicked() {
Toast.makeText(this, "You click the Button!", Toast.LENGTH_SHORT).show();
}