Android ButterKnife注解式开发
来源:互联网 发布:云服务器 8000 端口 编辑:程序博客网 时间:2024/05/17 04:20
原创文章,转载请注明 http://blog.csdn.net/leejizhou/article/details/50541356
先看一段代码
public class MainActivity extends AppCompatActivity { private Button button; private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button=(Button)findViewById(R.id.btn); editText=(EditText)findViewById(R.id.et); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this,editText.getText().toString(),3000).show(); } }); }}
作为一名Android开发者,相信你应该会对上面的代码很熟悉,如果你看不懂上面的代码,下面的也就不用继续看了,哈哈。在Android开发中findViewById和setOnClickListener可以说是非常机械化和浪费时间的代码了,相信你都快写吐了,这篇给大家介绍个ButterKnife框架,可以让你从繁琐毫无营养的代码中解脱出来,同样逻辑的代码看看用ButterKnife如何写。
public class MainActivity extends AppCompatActivity { @Bind(R.id.et) EditText editText; @OnClick(R.id.btn) public void btnClick(){ Toast.makeText(MainActivity.this,editText.getText().toString(),3000).show(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); }}
ButterKnife通过注解的方式帮你做了很多工作,代码是不是减少了很多,同时也增加了可读性,但是同样也会对没使用过的人阅读代码增加了学习成本,下面介绍下如何使用这个强大的ButterKnife。
Android Studio
- 在Gradle中引用
compile 'com.jakewharton:butterknife:7.0.1'
- 或者下载Jar包
下载地址:http://download.csdn.net/detail/leejizhou/9409535
Eclipse
- 下载Jar包
下载地址:http://download.csdn.net/detail/leejizhou/9409535
在Activity中使用
onCreate中加入这一行 (切记)
ButterKnife.bind(this);
ButterKnife通过@Bind 注解传入View ID,ButterKnife就可以自动地对你布局中的View进行转换并绑定到类成员上,你再也不用写findViewById了。
@Bind(R.id.et) EditText editText; @Bind(R.id.btn) Button button;
绑定资源到类成员上可以使用@BindBool、@BindColor、@BindDimen、@BindDrawable、@BindInt、@BindString。使用时对应的注解需要传入对应的id资源,例如@BindString你需要传入R.string.txt的字符串的资源id。
@BindString(R.string.title) String title; @BindDrawable(R.drawable.graphic) Drawable graphic; @BindColor(R.color.red) int red; @BindDimen(R.dimen.spacer) Float spacer;
View监听器的绑定,在ButterKnife注解中传入ViewID 监听器将自动配置到方法中,方法的参数都是可选的,例如下面3个都是可行的。
@OnClick(R.id.btn) public void btnClick(View view){ Toast.makeText(MainActivity.this,editText.getText().toString(),3000).show(); }
@OnClick(R.id.btn) public void btnClick(){ Toast.makeText(MainActivity.this,editText.getText().toString(),3000).show(); }
@OnClick(R.id.btn) public void btnClick(Button button){ button.setText("OK"); }
并且支持多ID控件绑定同一方法中
@OnClick({R.id.btn,R.id.btn2}) public void btnClick(Button button){ button.setText("ok"); }
ButterKnife不仅支持@OnClick,还支持@OnLongClick,@OnTouch等等,详细参考Javadoc http://jakewharton.github.io/butterknife/javadoc/
在非Activity中使用
Butter Knife提供了ButterKnife.bind()的几个重载,只要传入根布局,便可以在任何对象中使用注解绑定。
例如在Fragment中
public class FancyFragment extends Fragment { @Bind(R.id.button1) Button button1; @Bind(R.id.button2) Button button2; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fancy_fragment, container, false); ButterKnife.bind(this, view); // TODO Use fields... return view; }}
在ListView的Adapter中
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 view; } static class ViewHolder { @Bind(R.id.title) TextView name; @Bind(R.id.job_title) TextView jobTitle; public ViewHolder(View view) { ButterKnife.bind(this, view); } }}
ButterKnife.bind()方法可以被放在任何你想使用findViewById的地方。
对于在Fragment中使用ButterKnife需要注意:Fragment与Activity生命周期不同,Fragment比Activity多个解除绑定的步骤
@Override public void onDestroyView() { super.onDestroyView(); ButterKnife.unbind(this); }
ButterKnife的基本使用就介绍完了,是不是很强大,如果想更深入的了解和使用请参考Butter Knife的JavaDoc http://jakewharton.github.io/butterknife/javadoc/index.html
- Android ButterKnife注解式开发
- Android Studio 插件 —— ButterKnife注解式开发
- android快速开发:使用butterknife注解
- Android开发 butterknife注解框架异常--ArrayIndexOutOfBoundsException
- butterKnife注解开发框架
- Android butterknife注解框架
- Android ButterKnife注解框架
- android注解框架--ButterKnife
- Android快速开发工具ButterKnife Zelezny注解框架使用教程
- Android 注解开发 ButterKnife使用详解及教程
- Android开发 注解butterknife框架和权限permissionsdispatcher框架冲突
- Android Butterknife框架 注解攻略
- Android butterknife框架 注解攻略
- Android butterknife框架 注解攻略
- Android Butterknife框架 注解攻略:
- Android注解神器ButterKnife使用说明
- android注解框架ButterKnife学习
- Android 之ButterKnife注解使用
- oracle数据库乱码问题解决
- 三层交换机多VLAN之间DHCP配置
- App工程结构搭建:几种常见Android代码架构分析
- android dialog宽度无法填满屏幕解决方案
- ORACLE 对用户密码做限制
- Android ButterKnife注解式开发
- kali 下安装nessus
- Swift 调用系统相机 (自己封装的小Demo)
- Linux常用命令大全
- 树形结构的处理——组合模式(五):公司组织结构,组合模式总结
- IOS开发之UIScrollViewDelegate详解
- Android 讲解:数据共享
- android 图片处理工具
- C++中变量,函数的作用域和生命周期?