关于开源项目ButterKnife的使用心得
来源:互联网 发布:js定义二维数组举证 编辑:程序博客网 时间:2024/05/22 15:10
开源项目地址:https://github.com/JakeWharton/butterknife
个人使用总结:
本人用的是ADT,直接导入jar包使用是会报错的,注解无效。解决办法是选中项目右键properties->Java Compiler->Annotation Processin(选中Enable project specific setting)->展开后选中Factory path选中Enable project specific setting添加butterknife的jar包进来
有一些小伙伴说找不到Java Compiler中的Annotation Processin是因为没有安装插件,插件地址:http://download.eclipse.org/releases/juno,然后选择Programming Languages->Eclipse Java Development Tools后安装完成重启即可正常运行
展示一下使用效果:(以下转载自stormzhang前辈的博客,http://stormzhang.com/openandroid/android/2014/01/12/android-butterknife/)
使用前:
class ExampleActivity extends Activity { TextView title; TextView subtitle; TextView footer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simple_activity); title = (TextView) findViewById(R.id.title); subtitle = (TextView) findViewById(R.id.subtitle); footer = (TextView) findViewById(R.id.footer); // TODO Use views... }}
使用后
class ExampleActivity extends Activity { @InjectView(R.id.title) TextView title; @InjectView(R.id.subtitle) TextView subtitle; @InjectView(R.id.footer) TextView footer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simple_activity); ButterKnife.inject(this); // TODO Use "injected" views... }}
是不是非常简洁易用?下面就来系统的介绍下ButterKnife的用法。
Butter Knife 的特性
支持 Activity 中的 View 注入
支持 View 中的 View 注入
支持 View 事件回调函数注入
目前支持如下事件回调函数:
View: @OnLongClick and @OnFocusChanged.
TextView: @OnEditorAction.
AdapterView: @OnItemClick and @OnItemLongClick.
CompoundButton: @OnCheckedChanged.
下面来看一些注入的示例代码:
在Activity 中注入
class ExampleActivity extends Activity { @InjectView(R.id.title) TextView title; @InjectView(R.id.subtitle) TextView subtitle; @InjectView(R.id.footer) TextView footer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simple_activity); ButterKnife.inject(this); // TODO Use "injected" views... }}
在 Fragment 中注入
public class FancyFragment extends Fragment { @InjectView(R.id.button1) Button button1; @InjectView(R.id.button2) Button button2; @Override View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fancy_fragment, container, false); ButterKnife.inject(this, view); // TODO Use "injected" views... return view; }}
在 ViewHolder 模式中注入
public class MyAdapter extends BaseAdapter { @Override public View getView(int position, View view, ViewGroup parent) { ViewHolder holder; if (view != null) { holder = (ViewHolder) view.getTag(); } else { view = inflater.inflate(R.layout.whatever, parent, false); holder = new ViewHolder(view); view.setTag(holder); } holder.name.setText("John Doe"); // etc... return convertView; } static class ViewHolder { @InjectView(R.id.title) TextView name; @InjectView(R.id.job_title) TextView jobTitle; public ViewHolder(View view) { ButterKnife.inject(this, view); } }}
注入回调函数
下面是几种注入回调函数的方法示例:
// 带有 Button 参数@OnClick(R.id.submit)public void sayHi(Button button) { button.setText("Hello!");} // 不带参数@OnClick(R.id.submit)public void submit() { // TODO submit data to server...} // 同时注入多个 View 事件@OnClick({ R.id.door1, R.id.door2, R.id.door3 })public void pickDoor(DoorView door) { if (door.hasPrizeBehind()) { Toast.makeText(this, "You win!", LENGTH_SHORT).show(); } else { Toast.makeText(this, "Try again", LENGTH_SHORT).show(); }}
Reset函数
如果需要在 界面 销毁的时候,把注入的 View 设置为 Null, 则可以用 reset 函数:
public class FancyFragment extends Fragment { @InjectView(R.id.button1) Button button1; @InjectView(R.id.button2) Button button2; @Override View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fancy_fragment, container, false); ButterKnife.inject(this, view); // TODO Use "injected" views... return view; } @Override void onDestroyView() { super.onDestroyView(); Views.reset(this); }}
另外 还支持 可选的 View 注入,如果该 View 没有,就没有吧:
@Optional @InjectView(R.id.might_not_be_there) TextView mightNotBeThere; @Optional @OnClick(R.id.maybe_missing) void onMaybeMissingClicked() { // TODO ...}
还有两个 findViewById 函数来简化查找 View 的方式,如果上面都满足不了你的需求,你可以用用他们:
View view = LayoutInflater.from(context).inflate(R.layout.thing, null);TextView firstName = Views.findById(view, R.id.first_name);TextView lastName = Views.findById(view, R.id.last_name);ImageView photo = Views.findById(view, R.id.photo);
0 0
- 关于开源项目ButterKnife的使用心得
- 关于Eclipse注解项目ButterKnife的使用,记录而已。
- ButterKnife使用心得
- 开源框架----ButterKnife的使用
- Android 项目中ButterKnife的基本使用
- 关于Android Studio中butterknife的使用
- 关于ButterKnife使用
- 小项目关于js中使用ajax的心得
- 关于项目的一些心得
- 关于开源图表hellocharts-android的一些使用心得
- 关于butterknife的理解
- 【实训】关于Android ButterKnife注解框架的使用
- Android Studio 中关于 ButterKnife的配置及使用
- 关于emule的使用心得
- 关于虚拟机的使用心得
- 关于iebook的使用心得
- 关于DEVExpressSkins的使用心得
- 关于javamail的使用心得
- opencv——simpleblob
- Spring基于注解整合Hibernate EhCache实现对象缓存
- php strrpos 与 strpos
- Spring MVC和Struts1,Struts2的比较
- 游标
- 关于开源项目ButterKnife的使用心得
- android4.0 suspend/resume的流程
- sql中case when写法
- ftp操作文件报“550 create directory operation failed”解决方法
- 冒泡查找
- mysql中获取一天、一周、一月时间数据的各种sql语句写法
- Java修饰符public,private,protected及默认的区别
- DB2 licence过期解决
- 【BZOJ2301】【HAOI2011】Problem b 莫比乌斯反演+分块+前缀和