Android 依赖注入 ButterKnife 基本使用
2016-07-08 16:38
330 查看
ButterKnife 是一个快速 Android View 注入框架,开发者是Jake Wharton,简单的来说,ButterKnife 是用注解的方式替代findViewById和setXXXListener
项目GitHub地址:https://github.com/JakeWharton/butterknife/
Android Studio 配置步骤可以直接参考Github上的介绍,很简单。
ButterKnife 是在编译时注解,不会在运行时产生负担,Build工程后你会发现它生成了需要的代码,即它不是使用反射或者在运行时生成代码,所以它不会导致任何性能问题,也不会影响应用速度。
看过下面这句话,使用之后发现挺有道理。
1. 替代findViewById()
在变量声明的时候加上注解,如果找不到id,会在编译时报错,注意View变量声明的时候不能为private或者static。
在setContentView(view)后设置bind()。
ButterKnife 同样可以在Fragment、Adapter中使用,注意Fragment中要在onDestroyView()中调用unbind()。
2. 设置监听
ButterKnife 支持设置多种Listener,注意这里的方法仍然不能是private和static
@OnClick
@OnLongClick
@OnPageChange
OnPageChange.Callback
@OnTextChanged
OnTextChanged.Callback
@OnTouch
@OnItemClick
@OnItemLongClick
@OnCheckedChanged
其他方法的使用有待继续学习。
3. 绑定资源
注意变量声明同样不能为private或者static。
4. 多个View进行统一操作
未使用,待学习。
参考:
http://blog.csdn.net/itjianghuxiaoxiong/article/details/50177549 http://blog.csdn.net/jdsjlzx/article/details/51281844
待学习:
1. 常用Listener的使用
2. butterknife 源码分析
项目GitHub地址:https://github.com/JakeWharton/butterknife/
Android Studio 配置步骤可以直接参考Github上的介绍,很简单。
ButterKnife 是在编译时注解,不会在运行时产生负担,Build工程后你会发现它生成了需要的代码,即它不是使用反射或者在运行时生成代码,所以它不会导致任何性能问题,也不会影响应用速度。
看过下面这句话,使用之后发现挺有道理。
ButterKnife 不能算是一个真正的注入,更像是View的代言。
1. 替代findViewById()
在变量声明的时候加上注解,如果找不到id,会在编译时报错,注意View变量声明的时候不能为private或者static。
@BindView(R.id.hello_world_tv) TextView helloWorldTv; @BindView(R.id.a_hello_world_btn) Button aHelloWorldBtn;
在setContentView(view)后设置bind()。
setContentView(R.layout.activity_main); // ButterKnife.inject(this) should be called after setContentView() ButterKnife.bind(this);
ButterKnife 同样可以在Fragment、Adapter中使用,注意Fragment中要在onDestroyView()中调用unbind()。
public class SimpleFragment extends Fragment { private Unbinder unbinder; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_simple, container, false); unbinder = ButterKnife.bind(this, view); return view; } @Override public void onDestroyView() { unbinder.unbind(); super.onDestroyView(); } }
2. 设置监听
ButterKnife 支持设置多种Listener,注意这里的方法仍然不能是private和static
@OnClick
public void onClick(View view) { // 处理onClick事件 }
@OnLongClick
public boolean onLongClick(View view){ // return true; // Click事件被onLongClick处理掉 // return false; // Click事件不被onLongClick处理,后续仍会触发onClick事件 }
@OnPageChange
OnPageChange.Callback
@OnTextChanged
OnTextChanged.Callback
@OnTouch
@OnTouch({R.id.hello_world_tv}) public boolean onTouch(View view, MotionEvent event){ if (view.getId() == R.id.hello_world_tv) { helloWorldTv.setText("Wa ha ha ha ha..."); } return true; }
@OnItemClick
@OnItemClick(R.id.my_list_view) // public void onItemClick(AdapterView<?> parent, View view, int position, long id) void onItemClick(int position) {//though there are 4 parameters, you can just write the one you want to use Toast.makeText(this, "You clicked: " + adapter.getItem(position).getName(), Toast.LENGTH_SHORT).show(); }
@OnItemLongClick
@OnItemLongClick(R.id.my_list_view) boolean onItemLongClick(int position) { Toast.makeText(this, "You Long Click: " + adapter.getItem(position).getName(), Toast.LENGTH_SHORT).show(); return true; //if return false, the onItemClick() will be invoked when touch up }
@OnCheckedChanged
public void OnCheckedChanged(CompoundButton buttonView, boolean isChecked) { switch (buttonView.getId()) { case R.id.a_simple_checkbox: Toast.makeText(this, "a_isChecked = " + isChecked, Toast.LENGTH_SHORT).show(); break; case R.id.b_simple_checkbox: Toast.makeText(this, "b_isChecked = " + isChecked, Toast.LENGTH_SHORT).show(); break; case R.id.c_simple_checkbox: Toast.makeText(this, "c_isChecked = " + isChecked, Toast.LENGTH_SHORT).show(); break; default: break; } }
其他方法的使用有待继续学习。
3. 绑定资源
注意变量声明同样不能为private或者static。
@BindString(R.string.app_name) String appName;//sting @BindColor(R.color.red) int textColor;//颜色 @BindDrawable(R.mipmap.ic_launcher) Drawable drawable;//drawble @BindDrawable(R.drawable.selector_image) Drawable selector;
4. 多个View进行统一操作
未使用,待学习。
参考:
http://blog.csdn.net/itjianghuxiaoxiong/article/details/50177549 http://blog.csdn.net/jdsjlzx/article/details/51281844
待学习:
1. 常用Listener的使用
2. butterknife 源码分析
相关文章推荐
- Android Studio每次重启都恢复之前的状态
- Android 控件之TextView常见使用问题
- Android自定义控件:绘图基础Canvas、Paint类
- 使用Android SDK Manager更新时出现Download Interrupted:Connection reset错误解决办法
- Android开发——SQLite数据库框架Sugar的使用
- Android 复习笔记5 listView ArrayList
- Android中关于Intent filter和Intent的一些用法。
- universal-imageloader和glide清除磁盘缓存问题
- Android RecyclerView使用notifyItemRemoved()移除数据时数据错乱
- Service里面启动Activity和Alertdialog
- Android系统永不锁屏永不休眠的方法
- Android 动画初步
- android:windowSoftInputMode属性详解
- Android中的Interpolator
- 修改SEAndroid的模式
- Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- android资源文件(assets and raw) 的读写
- 如何排查并解决SEAndroid 的审计不通过
- Android5.x之RecyclerView使用(5)网格布局
- Broadcast Receiver的两种注册方法