ButterKnife的使用详解
来源:互联网 发布:下载软件管理 编辑:程序博客网 时间:2024/05/01 01:19
ButterKnife的介绍
ButterKnife是一个支持View注入的框架。通常要写很多findViewById来初始化View对象,有了ButterKnife可以很轻松的省去这些步骤。ButterKnife是大神JakeWharton的力作,目前使用很广。最重要的一点,使用ButterKnife对性能基本没有损失,因为ButterKnife用到的
注解并不是在运行时反射的,而是在编译的时候生成新的class。(XUtils的注入都是运行时反射,对性能影响很大。)ButterKnife目前的
最新版本是7.0.1。官方网址:http://jakewharton.github.io/butterknife/
使用时应注意
- Activity ButterKnife.bind(this);必须在setContentView();之后,且父类bind绑定后,子类不需要再bind
- Fragment ButterKnife.bind(this, mRootView);
- 属性布局不能用private or static 修饰,否则会报错
- setContentView()不能通过注解实现。(其他的有些注解框架可以)
使用方法:
- 如果使用Eclipse,可以去官网下载jar包导入
如果使用AndroidStudio可以直接在gradle中添加依赖 compile 'com.jakewharton:butterknife:7.0.1'
在Activity中绑定
import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.Button;import android.widget.TextView; import butterknife.Bind;import butterknife.ButterKnife; public class MainActivity extends AppCompatActivity{ //给指定的TextView绑定id @Bind(R.id.tv) TextView tv; //给指定的Button绑定id @Bind(R.id.btn) Button btn; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); tv.setText("哈哈"); btn.setText("呵呵呵"); }} 注意:需要绑定的控件不能是private和static的
在Fragment中绑定
public class BlankFragment extends Fragment{ @Bind(R.id.f_tv) TextView f_tv; @Bind(R.id.f_btn) Button f_btn; public BlankFragment(){ // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ View view=inflater.inflate(R.layout.fragment_blank, container, false); ButterKnife.bind(this, view); return view; } @Override public void onDestroyView() { super.onDestroyView(); ButterKnife.unbind(this);//解绑 }}
在ViewHolder中绑定
@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.layout_list_item, null); holder = new ViewHolder(convertView); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.textview.setText("item=====" + position); return convertView; } static class ViewHolder { @Bind(R.id.hello_world) TextView textview; public ViewHolder(View view) { ButterKnife.bind(this, view); } }
注意:我们在ViewHolder中添加了一个有View参数的构造方法,以后再也不需要在getView方法中findViewById了
绑定事件回调方法
@OnClick({R.id.btn}) public void ok(){ //方法形参列表中可以有View也可以没有 Toast.makeText(this, "点击了Activity中的按钮", Toast.LENGTH_SHORT).show(); } 也可以多个View控件的点击事件绑定在一个方法中。 除了点击事件@OnClick,还有ListView的点击@OnItemClick, CheckBox的@OnCheckedChanged等等.
ButterKnife一些其他常用方法
1、解除绑定@Override protected void onDestroy(){ super.onDestroy(); //解绑。 即把上面绑定的view全部置为null ButterKnife.unbind(this); } 2、选择性绑定。默认情况下绑定View和事件的时候,控件的id是必须存在的,否则会抛出异常。 选择性绑定可以做到如果id存在就绑定,否则不绑定,不抛出任何异常。 想达到这样的想过只需要在@bind 或@onClick前添加@null即可@Nullable @Bind(R.id.f_tv)TextView tv; 3、多方法绑定@OnItemSelected(R.id.list_view)void onItemSelected(int position) { // TODO ...} @OnItemSelected(value = R.id.maybe_missing, callback = NOTHING_SELECTED)void onNothingSelected() { // TODO ...}4、findById方法。以前我们调用findViewById需要进行强制类型转换。使用它可以免除强制类型转换,可以自动完成类型转换。View view = LayoutInflater.from(context).inflate(R.layout.thing, null);TextView firstName = ButterKnife.findById(view, R.id.first_name);TextView lastName = ButterKnife.findById(view, R.id.last_name);ImageView photo = ButterKnife.findById(view, R.id.photo);
Android Studio 中Zelezny插件的使用
在AndroidStudio->File->Settings->Plugins->搜索Zelezny下载添加就行 ,可以快速生成对应组件的实例对象,不用手动写。使用时,在要导入注解的Activity 或 Fragment 或 ViewHolder的layout资源代码上,右键——>Generate——Generate ButterKnife Injections,然后就出现如图的选择框。(此动态图来自官网)
0 0
- ButterKnife的使用详解
- ButterKnife的使用详解
- ButterKnife的使用详解
- ButterKnife的使用详解
- ButterKnife的配置使用详解
- butterknife的注册和使用详解
- ButterKnife v7.0.1的使用详解
- ButterKnife使用详解
- ButterKnife框架使用详解
- ButterKnife使用详解
- Butterknife使用详解
- ButterKnife使用详解
- ButterKnife使用详解
- ButterKnife使用详解
- ButterKnife使用详解
- ButterKnife框架使用详解
- ButterKnife使用详解
- ButterKnife使用详解
- Linux命令-查看用户的UID和GID
- 分布式Web应用----Linux环境下zookeeper集群环境的安装与配置
- 编程语言NodeJSの基础入门
- Text Kit
- jquery的要点
- ButterKnife的使用详解
- JAVA各类框架之选择
- java实现跨平台
- csuoj-1718- And Then There Was 5
- JavaWeb基础---从HTTP到Servlet到Jfinal
- 使用ndk-gdb调试android native程序
- 【BZOJ1029】[JSOI2007]建筑抢修【优先队列】【贪心】
- 粒子群算法的matlab实现
- 数据结构 1、概述 特性、分类、复杂性分析