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

     

    效果:

     

  • 相关阅读:
    匿名函数与内置函数(python3入门)
    迭代器和生成器(python3入门)
    python中文件操作方法(python3入门)
    python所有数据类型及操作(python3入门)
    Python语法命令学习-Day3(作业练习)
    Python语法命令学习-Day3(零基础)
    构建之法阅读笔记01
    学习进度条
    软件工程个人作业01
    阅读计划
  • 原文地址:https://www.cnblogs.com/sanshengshitouhua/p/14577234.html
Copyright © 2011-2022 走看看