ButterKnife 初体验
ButterKnife
环境搭建
在project的build.gradle文件中添加依赖的插件
//ButterKnife 的插件
// classpath 'com.jakewharton:butterknife-gradle-plugin:8.8.1'
在app的build.gradle文件中添加依赖,并添加插件
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
使用
在Activity中
public class MainActivity extends AppCompatActivity {
    private static final String TAG = MainActivity.class.getSimpleName();
    //使用@BindView来绑定一个View对象,绑定的对象不能是private或者static修饰的
    @BindView(R.id.add_one)
    Button addOne;
    @BindView(R.id.add_100)
    Button add100;
    @BindView(R.id.update_100)
    Button update100;
    @BindView(R.id.update_first)
    Button updateFirst;
    @BindView(R.id.delete_one)
    Button deleteOne;
    @BindView(R.id.delete_all)
    Button deleteAll;
    @BindView(R.id.query)
    Button query;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //绑定必须发生在已经设置过layout布局文件之后
        ButterKnife.bind(this);
    }
    //用@OnClick注解标识是Click方法
    @OnClick({R.id.add_one, R.id.add_100, R.id.update_100, R.id.update_first, R.id.delete_one, R.id.delete_all, R.id.query})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.add_one:
                StudentDaoOpe.insertData(this,new Student(null,"zhangsan","zhangsan@163.com",15));
                break;
            case R.id.add_100:
                add100();
                break;
            case R.id.update_100:
                update100();
                break;
            case R.id.update_first:
                StudentDaoOpe.updateData(this,new Student(null,"zhangsan","zhangsan@163.com",15));
                break;
            case R.id.delete_one:
                StudentDaoOpe.deleteData(this,new Student(null,"zhangsan","zhangsan@163.com",15));
                break;
            case R.id.delete_all:
                StudentDaoOpe.deleteAllData(this);
                break;
            case R.id.query:
                startActivity(new Intent(this,QueryActivity.class));
                break;
        }
        Log.i(TAG, "onViewClicked: "+view.getId() + " finish ");
    }
    private void add100() {
    }
    private void update100() {
    }
}
小点点
- 在Activity中不需要解绑,但是在Fragment中却需要在onDestroyView中进行解绑
 - 修饰符不允许使用private或者static
 - 在非Activity中,bind的this参数不允许被替换为getActivity
 - 可以绑定颜色,资源等,也可以绑定多个view
 
事件处理
- @OnClick 点击事件
 - @OnCheckedChanged 选中和取消选中
 - @OnEditorAction 软键盘的功能键
 - @OnFocusChange 焦点改变
 - @OnItemClick item 条目被点击
 - @OnItemLongClick 长按
 - @OnItemSelected item被选择事件
 - @OnLongClick 长按事件
 - @OnPageChange 页面改变事件
 - @OnTextChanged EditText里面的文本变化事件
 - @OnTouch 触摸事件
 - @Optional
 
ButterKnife 初体验的更多相关文章
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
		
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
 - Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
		
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
 - Spring之初体验
		
Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...
 - Xamarin.iOS开发初体验
		
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0
 - 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验
		
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...
 - 【Knockout.js 学习体验之旅】(1)ko初体验
		
前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...
 - 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验
		
在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...
 - 百度EChart3初体验
		
由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...
 - Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验
		
Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出E ...
 
随机推荐
- Go语言类型转换
			
类型转换用于将一种数据类型的变量转换为另外一种类型的变量. Go语言类型转换基本格式如下:表达式 T(v) 将值 v 转换为类型 T . Go语言各种类型转换及函数的高级用法:strconv包实现了基 ...
 - service iptables xxx无效命令的情况下,如何启动/重启iptables
			
最近在CentOS 7.6下使用service iptables xxx相关命令,提示如下错误:The service command supports only basic LSB actions ...
 - hibernate的反向生成改懒加载的地方
			
改变懒加载只需要把生成的文件中的获取类型改为eager fetch = FetchType.EAGER @ManyToOne(fetch = FetchType.EAGER)//把懒加载换成饿加载模式 ...
 - Swagger与SpringMVC项目整合
			
Swagger与SpringMVC项目整合 来源:http://www.2cto.com/kf/201502/376959.html 为了方便的管理项目中API接口,在网上找了好多关于API接口管理的 ...
 - python-pymongo使用
			
#-*- coding: utf-8 -*- #python2.7x from pymongo import MongoClient def get_db(): #建立连接 client = Mong ...
 - digestmd5.c:4037:15: error: #elif with no expression
			
执行如下:sed -i.bak 's/#elif WITH_DES/#elif defined(WITH_DES)/' \ plugins/digestmd5.c
 - TreeMap红黑树
			
Java TreeMap实现了SortedMap接口,也就是说会按照key的大小顺序对Map中的元素进行排序,key大小的评判可以通过其本身的自然顺序(natural ordering),也可以通过构 ...
 - 多线程编程(四)-CyclicBarrier的使用
			
CyclicBarrier的介绍 类CyclicBarrier不仅有CountDownLatch所具有的功能,还可以是啊县屏障等待的功能,也就是阶段性同步,它在使用上的意义在与可以循环地实现线程要一起 ...
 - Leetcode 483. Smallest Good Base
			
For an integer n, we call k>=2 a good base of n, if all digits of n base k are 1. Now given a str ...
 - [PY3]——字符串的分割、匹配、搜索方法总结
			
?分割.匹配.搜索时可以用到什么样的解决方法? 分割方法总结 1. str.split( ) * 分割字符串 * 返回列表 s1='I love python' # 默认以空格为界定符,且多个空格都当 ...