zoukankan      html  css  js  c++  java
  • ButterKnife1(2018年9月12日-2018年9月14日)

    2018.9.12

    1ButterKnife——牛油刀

    Field and method binding for Android Views which uses annotation processing to generate boilerplate code for you

    功能:

    1)绑定字段

    2)可以绑定成组的组件或者数组

    3)绑定监听器

    4)绑定资源

    2、如何获取ButterKnife

    1)在Projectbuild.gradle中设置buildScripts,插件依赖。

    buildscript {

        repositories {

            google()

            maven {

                name "aliyunmaven"

                url "http://maven.aliyun.com/nexus/content/groups/public/"

            }        jcenter()

        }

        dependencies {

            classpath 'com.android.tools.build:gradle:3.1.0'

        }

    }

    allprojects {

        repositories {

            google()

            maven {

                name "aliyunmaven"

                url "http://maven.aliyun.com/nexus/content/groups/public/"

            }

            jcenter()

        }

    }

    2Module依赖设置的build.gradle中设置:

    implementation 'com.jakewharton:butterknife:8.8.1'

    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

    3)使用ButterKnife.bind(this),表示当前activity开启绑定。

    4)注册字段,并绑定。

    Project---build.gradle:

     

    Module----build.gradle:

     

    Layout:

     

    MainActivity.java

     

    效果:

     

    implementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

    改为implementation 'com.jakewharton:butterknife:8.4.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'

    2018.9.13

    1、ButterKnife如何实现绑定?

    不是使用反射,而是使用代码生成,生成了bind的delegate方法,在oncreate中调用了bind,其实就是执行了findViewById().

    性能没有下降。

    【案例】查看ButterKnife自动生成的代码

     

    2、资源绑定

    Android中的资源:

    图片、字符串、数组

    使用的注解有:

    @BindBool,绑定一个逻辑值

    @BindColor, 绑定一个颜色

    @BindDimen, 绑定一个尺寸

    @BindDrawable, 绑定一个图片

    @BindInt,绑定一个整数

    @BindString,绑定一个字符串

    【案例】如何绑定一个图片资源到Imageview上

    项目结构:

     

    string.xml

     

    activity_main.xml

     

    MainActivity.java

     

    效果:

     

    3、非Activity绑定

    在Fragment中实现绑定。

    【案例】在一个activity中加载了一个Fragment,fragment中有控件需要绑定,如何实现?

    (1)定义Fragment的layout

    (2)定义Fragment类 继承V4.fragment

    (3)在Fragment中的onCreatView方法中实现ButterKnife的绑定

    (4)在Activity对应的布局中引用Fragment,需要指定id。

    项目结构:

     

    fragment_fancy.xml

     

    FancyFragment.java

     

    activity_main.xml

     

    MainActivity.java

     

    效果:

    RecyclerView中实现控件id绑定。

    ViewHolder中实现绑定。

    【案例】

     

    build.gradle:

    dependencies {

        implementation fileTree(include: ['*.jar'], dir: 'libs')

        implementation 'com.android.support:appcompat-v7:27.1.1'

        implementation 'com.android.support.constraint:constraint-layout:1.1.0'

        implementation 'com.jakewharton:butterknife:8.8.1'

        implementation 'com.android.support:support-v4:27.1.1'

        implementation 'com.android.support:design:27.1.1'

        annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

        testImplementation 'junit:junit:4.12'

        androidTestImplementation 'com.android.support.test:runner:1.0.2'

        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

        implementation 'com.android.support:recyclerview-v7:27.1.1'

    }

    item.xml

     

    Person.java

     

    MyHolder.java

     

    MyAdapter.java

     

     

    activity_main2.xml

     

    Main2Activity.java

     

    效果:

     

    4、绑定一组view

    例如,多个TextView一起绑定到一个List集合中。

    使用的注解是@bindViews({x,y,z})--->List<view>

    activity_main.xml

     

    MainActivity.java

     

    效果:

     

    2018.9.14

    1、绑定监听器

    ClickListenerSelectedItemListener……

    将控件的事件与view绑定。

    【案例】为2个按钮来绑定click事件。

    piu注意:

    1)支持任意参数(可以有,也可以没有,如果有的话,按照listener写法)

    2)参数类型可以从View类型转换成目标类型

    【案例】实现参数类型转换和多Ids绑定

     

    3)支持自定义控件的事件绑定

    【案例】实现自定义控件的事件绑定

     

    activity_main.xml:

     

    MainActivity.java不变。

    效果:

     

    2、绑定重置

    目的,让程序性能更好,不用时释放绑定。

    【案例】在Fragment中实现绑定重置

    项目结构:

     

    fragment_red.xml

     

    fragment_blue.xml

     

    RedFragment.java

     

     

    BlueFragment.java

     

    activity_main2.xml

     

     

    Main2Activity.java

     

    效果:

     

    3、可选的绑定

    允许资源不存在,允许找不到指定的id控件。

    在控件field上,使用@nullable

    在控件method上,使用@optional

     

    4、针对多方法的监听器如何绑定?

    一个监听器中含有多个方法,只需绑定一个监听器,一个监听器在绑定时只能设置一个方法,如果一个监听器含有2个方法,另一个方法如何绑定?

    使用:

    @OnItemSelected(value = R.id.maybe_missing, callback = NOTHING_SELECTED)

    void onNothingSelected() {

      // TODO ...

    }

    另一个方法,使用callback来指定,注意,按单词来分割编写,用_”来连接。

    【案例】修改RecyclerView案例,实现点击响应。

    修改MyAdapter.java

     

     

    效果:

     

    【思考】如果点击每一项,显示该项内容,如何实现?

     

    4、通过ButterKnife创建针对集合控件操作的动作Act

    作用,这个动作对所有控件都生效。

    步骤:

    1)定义动作

    2)执行动作

    【案例】定义一个动作,并执行。

    activity_main3.xml

    4、通过ButterKnife创建针对集合控件操作的动作Act

    作用,这个动作对所有控件都生效。

    步骤:

    1)定义动作

    2)执行动作

    【案例】定义一个动作,并执行。

    activity_main3.xml

    4、通过ButterKnife创建针对集合控件操作的动作Act

    作用,这个动作对所有控件都生效。

    步骤:

    1)定义动作

    2)执行动作

    【案例】定义一个动作,并执行。

    activity_main3.xml

     

    Main3Activity.java

    效果:

    Main3Activity.java

     

    效果:

     

  • 相关阅读:
    python 基础2.5 循环中continue与breake用法
    python 基础 2.4 while 循环
    python 基础 2.3 for 循环
    python 基础 2.2 if流程控制(二)
    python 基础 2.1 if 流程控制(一)
    python 基础 1.6 python 帮助信息及数据类型间相互转换
    python 基础 1.5 python数据类型(四)--字典常用方法示例
    Tornado Web 框架
    LinkCode 第k个排列
    LeetCode 46. Permutations
  • 原文地址:https://www.cnblogs.com/sanshengshitouhua/p/14577234.html
Copyright © 2011-2022 走看看