【Android 进阶】ButterKnife-黄油刀
现在养成了一个好习惯,每当我学习了一个新东西,总想要记录下来。记录的过程其实就是对知识的一次梳理,可以查漏补缺。
而记录下来也是为了方便以后的重温,毕竟人的遗忘曲线还是很恐怖的。
黄油刀-ButterKnife是什么?
ButterKnife是注解框架中相对简单易懂的很不错的开源框架
为什么要学习并使用ButterKnife呢?
1.强大的View绑定和Click事件处理功能,简化代码,提升开发效率
2.方便的处理Adapter里的ViewHolder绑定问题
3.运行时不会影响APP效率,使用配置方便
4.代码清晰,可读性强
开源地址:
https://github.com/JakeWharton/butterknife
使用准备:
1)在Setting->Plugins中输入butterknife添加插件
Android ButterKnife Aelezny ->点击安装
2)在Module里的build.gradle里面添加
compile ‘com.jakewharton:butterknife:7.0.1’
常用功能:
1.省略findViewById()
(1)Activity中使用
**以前:**mTextView = (TextView) findViewById(R.id.butter_text_view);
现在:
@InjectView(R.id.butter_text_view_2)
TextView mTextView2;
在设置好布局之后调用:
ButterKnife.inject(this);当前视图与ButterKnife绑定。
注意:
View变量声明的时候不能为private或者static.
(2)Fragment中使用
示例代码:
public class SimpleFragment extends Fragment {
@InjectView(R.id.fragment_text_view)
TextView mTextView;
public SimpleFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_simple, container, false);
ButterKnife.inject(this, view);
mTextView.setText("在使用黄油刀");
return view;
}
}
(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()
以前:
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
现在:
@OnClick(R.id.button)
void doSomethings(View view) { //参数可以省略
dothings();
}
.
.
.
ButterKnife.inject(this);//布局文件与黄油刀最终绑定
注意:
1.这里方法仍然不能是private和static, 并且可以有一个参数View,也可不写.
2.ListView的点击@OnItemClick, CheckBox的@OnCheckedChanged也可以实现省略操作
3.可以一次指定多个id,为多个View绑定一个事件处理方法
示例:
@OnClick({R.id.button_1, R.id.button_2, R.id.button_3, R.id.button_4})
void buttonsClicked() {
Toast.makeText(this, "四个按钮同一个效果哈", Toast.LENGTH_SHORT).show();
}
更多相关文章
- jsp权限菜单绑定的基本实现
- Android绑定银行卡提现怎么做?
- 绑定服务后台播放音频的简单示例
- 如何为后台工作创建绑定服务(Xamarin)
- javascript(六)js事件绑定浏览器兼容解决方案 attachEvent addEve
- 使用SWT/JFace与WindowBuilder绑定数据的参考资料