博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 依赖注入 ButterKnife 基本使用
阅读量:5263 次
发布时间:2019-06-14

本文共 3692 字,大约阅读时间需要 12 分钟。

ButterKnife 是一个快速 Android View 注入框架,开发者是,简单的来说,ButterKnife 是用注解的方式替代findViewById和setXXXListener

项目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. 

 

转载于:https://www.cnblogs.com/fansen/p/5653887.html

你可能感兴趣的文章
整理推荐的CSS属性书写顺序
查看>>
ServerSocket和Socket通信
查看>>
css & input type & search icon
查看>>
源代码的下载和编译读后感
查看>>
Kafka学习笔记
查看>>
Octotree Chrome安装与使用方法
查看>>
Windows 环境下基于 Redis 的 Celery 任务调度模块的实现
查看>>
趣谈Java变量的可见性问题
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
ssm框架之将数据库的数据导入导出为excel文件
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
验证组件FluentValidation的使用示例
查看>>
0320-学习进度条
查看>>
解决windows系统的oracle数据库不能启动ora-00119和ora-00130的问题
查看>>
ip相关问题解答
查看>>
MetaWeblog API Test
查看>>
反弹SHELL
查看>>
关闭Chrome浏览器的自动更新和升级提示
查看>>
移动、尺寸改变
查看>>
poj2255Tree Recovery【二叉树重构】
查看>>