安卓“小试牛刀”:ButterKnife——牛油刀

“小试牛刀”大总结(一)

  • 1.ButterKnife——牛油刀
    • 2.ButterKnife是如何实现性能不损失的绑定?
      • 3.资源的绑定
        • 4.非Activity中的绑定
          • (续跟)1.绑定一组View
            • 2.绑定监听器

1.ButterKnife——牛油刀

ButterKnife是一个专注于Android系统的View注入框架,在过去的项目中总是需要很多的findViewById来查找View对象,有了ButterKnife可以轻松省去这些步骤。目前使用较为广泛,最重要的一点,使用ButterKnife对性能基本不造成损失,因为ButterKnife用的是注解而不是运行时的反射,所以最终在编译时生成了新的class文件,项目集成非常方便,用起来相对简单。

(1)使用View中的控件,代码简化
(2)程序性能不受损失
特点:
(1)使用@BindView绑定View
(2)支持多个View同时绑定,可以设置相关的动作
(3)使用类似@OnClick设置监听器
(4)可以绑定资源
如何使用?
(1)添加依赖
(2)检查依赖添加是否成功
(3)绑定

【案例】
安卓“小试牛刀”:ButterKnife——牛油刀_第1张图片
build.gradle(project):
安卓“小试牛刀”:ButterKnife——牛油刀_第2张图片
依赖:

classpath ‘com.jakewharton:butterknife-gradle-plugin:10.2.3’

build.gradle(module):
安卓“小试牛刀”:ButterKnife——牛油刀_第3张图片
依赖:

implementation ‘com.jakewharton:butterknife:10.2.3’
annotationProcessor ‘com.jakewharton:butterknife-compiler:10.2.3’

activity_main.xml
安卓“小试牛刀”:ButterKnife——牛油刀_第4张图片
MainActivity.java
安卓“小试牛刀”:ButterKnife——牛油刀_第5张图片
效果:
安卓“小试牛刀”:ButterKnife——牛油刀_第6张图片

2.ButterKnife是如何实现性能不损失的绑定?

控件是如何实例化?
使用ButterKnife自动生成了findViewById相关代码,而不是使用反射,所以性能没有损失。

3.资源的绑定

android中哪些属于资源?
图片、布局、字符串、数组、样式、主题等。
使用ButterKnife的注解可以对资源进行绑定:
@BindBool 绑定逻辑值
@BindColor 绑定颜色值
@BindDimen 绑定一个尺寸
@BindDrawable 绑定一个图片
@BindInt 绑定一个整数
@BindString 绑定一个字符串
【案例】绑定一个图片到ImageView上
安卓“小试牛刀”:ButterKnife——牛油刀_第7张图片
activity_main2.xml
安卓“小试牛刀”:ButterKnife——牛油刀_第8张图片
MainActivity2.java
安卓“小试牛刀”:ButterKnife——牛油刀_第9张图片
效果:
安卓“小试牛刀”:ButterKnife——牛油刀_第10张图片
【案例】绑定字符串
安卓“小试牛刀”:ButterKnife——牛油刀_第11张图片
strings.xml
安卓“小试牛刀”:ButterKnife——牛油刀_第12张图片
activity_main2.xml
安卓“小试牛刀”:ButterKnife——牛油刀_第13张图片
MainActivity2.java
安卓“小试牛刀”:ButterKnife——牛油刀_第14张图片
效果:
安卓“小试牛刀”:ButterKnife——牛油刀_第15张图片

4.非Activity中的绑定

子控件、Fragment、ListView、RecyclerView等等。这些控件都与View相关,加载布局时含有其他控件,如何绑定?
【案例】Activity中加载一个Fragment,Fragment中加载一个布局,布局中有2个按钮,如何对这两个按钮进行绑定?
安卓“小试牛刀”:ButterKnife——牛油刀_第16张图片
fragment_my.xml
安卓“小试牛刀”:ButterKnife——牛油刀_第17张图片
activity_main3.xml
安卓“小试牛刀”:ButterKnife——牛油刀_第18张图片
MyFragment.java
安卓“小试牛刀”:ButterKnife——牛油刀_第19张图片
效果:
安卓“小试牛刀”:ButterKnife——牛油刀_第20张图片
【案例】在RecyclerView中实现绑定
绑定写在哪里?
需要创建Holder、Adapter、RecyclerView、主布局、条目布局。
主布局的绑定写入到Activity中即可。条目布局中的控件写在哪里进行绑定?
要求:
给定100个序号,以列表的形式展示100个序号。序号使用TextView显示。如何实现绑定?

安卓“小试牛刀”:ButterKnife——牛油刀_第21张图片
item.xml
安卓“小试牛刀”:ButterKnife——牛油刀_第22张图片
activity_main4.xml
安卓“小试牛刀”:ButterKnife——牛油刀_第23张图片
MyHolder.java
安卓“小试牛刀”:ButterKnife——牛油刀_第24张图片
MyAdapter.java
安卓“小试牛刀”:ButterKnife——牛油刀_第25张图片
MainActivity4.java
安卓“小试牛刀”:ButterKnife——牛油刀_第26张图片
效果:
安卓“小试牛刀”:ButterKnife——牛油刀_第27张图片

【拓展】如果每个按钮既有公共的逻辑,又有独特的逻辑,怎么办?
(1)识别共同逻辑,和独有逻辑
(2)共同逻辑放在公共代码区域
(3)要想执行部分,由具体的实例来决定,就需要在实例部分传入具体的实现。
(3.1)所以需要定义接口,接口约定方法签名即可。
(3.2)要添加接口方法在什么地方调用。
(3.3)接口实现,需要在执行接口前传入。需要声明一个接口变量,用来接收外界传入接口的实现类的实例。
(3.4)外界实现这个接口,并传入。
(4)当用户点击按钮时,就执行已经传入后的接口实现方法。
【项目结构】
安卓“小试牛刀”:ButterKnife——牛油刀_第28张图片
MyButton.java
安卓“小试牛刀”:ButterKnife——牛油刀_第29张图片
安卓“小试牛刀”:ButterKnife——牛油刀_第30张图片
activity_main.xml(约束布局用上)
约束布局详解,点我来瞅瞅!
安卓“小试牛刀”:ButterKnife——牛油刀_第31张图片
MainActivity.java
安卓“小试牛刀”:ButterKnife——牛油刀_第32张图片
效果:
安卓“小试牛刀”:ButterKnife——牛油刀_第33张图片安卓“小试牛刀”:ButterKnife——牛油刀_第34张图片

(续跟)1.绑定一组View

例如多个TextView一起绑定到一个List集合,集合是一个android资源。
使用注解@BindViews({x,y,z})
【案例】
安卓“小试牛刀”:ButterKnife——牛油刀_第35张图片
activity_main.xml
安卓“小试牛刀”:ButterKnife——牛油刀_第36张图片
MainActivity.java
安卓“小试牛刀”:ButterKnife——牛油刀_第37张图片
效果:
安卓“小试牛刀”:ButterKnife——牛油刀_第38张图片

2.绑定监听器

事件有哪些?
clickListener、SelectedItemListener等
监听器的绑定注解:

@OnClick(R.id.btn1)
public void click(View v){
}//此方法为事件发生时绑定到btn1上

【案例】
安卓“小试牛刀”:ButterKnife——牛油刀_第39张图片
activity_main2.xml
安卓“小试牛刀”:ButterKnife——牛油刀_第40张图片
MainActivity2.java
安卓“小试牛刀”:ButterKnife——牛油刀_第41张图片
效果:
安卓“小试牛刀”:ButterKnife——牛油刀_第42张图片
代码希望大家可以自己敲一遍,有需要讨论的地方留言私信都可以哦!

文章后续——牛油刀(2)

安卓“小试牛刀”:ButterKnife——牛油刀_第43张图片

你可能感兴趣的:(android高级开发笔记,android,开发语言)