zoukankan      html  css  js  c++  java
  • 厌烦了写findViewById 试试ButterKnife吧

    先上官网

    http://jakewharton.github.io/butterknife/  和 https://github.com/JakeWharton/butterknife

    配置开发环境

    在代码开始之前 先要将库加入依赖

    Eclipse 

    去官网手工下载 jar 包, 放到 libs目录 或者其他方式加入到 Build Path当中

    Android Studio

    GUI 操作的方式 

    菜单上 File -> Project Structure (或者直接点工具栏上的Project Structure) -> 左侧 Modules下的 app  -> 右侧  Dependencies 标签页 -> +号 -> Library dependency  搜索 butterknife  选择 com.jakewharton:butterknife:8.4.0 然后 OK, 版本号会变 , 反正选择没有 -compiler 这种带尾巴的。

    新的butterknife 增加了 annotationProcessor 这种方式无法添加, 所以最终还是要编辑 Gradle Script

    编辑 Gradle Script的方式 

    打开 Module app的 build.gradle , 在dependencies 添加两行

    dependencies {
        ...
        compile 'com.jakewharton:butterknife:8.4.0'
        annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
       ...
    }

    省略号代表其他已有的 dependencies 。 添加之后 sync 

    启动ButterKnife

    开发环境配好后, 编码开始

    在 Activity中使用, 首先要启动butterknife , 在 onCreate里 setContentView 之后立即 ButterKnife.bind(this);

       protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ButterKnife.bind(this);
        }

    绑定View

    是用@BindView 替代findViewById

    public class MainActivity extends AppCompatActivity {
    
        @BindView(R.id.btnGet)
        Button mBtnGet;
    
        @BindView(R.id.tvResult)
        TextView mTvResult;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ButterKnife.bind(this);
    
            mBtnGet.setText("do get");
    
        }
    }

    注意: 注解只能用在类成员上, 成员不能用 private 或 static 修饰, 不能用在方法中的局部变量上

    绑定 资源

        @BindString(R.string.app_name)
        String appName;
    
        @BindColor(R.color.colorPrimary)
        int colorPrimary;
    
        @BindBool(R.bool.bool_name)
        boolean boolName;

    还支持更多类型,就不一一列举类

    绑定 click 事件

    不用声明 view 也不用setOnClickListener   , 参数是可有可无的, 如果不使用,不写省事

        @OnClick(R.id.btnPost) void doPost() {
            mTvResult.setText("do post done");
        }

     当然也可以像 onClickListener 一样带上参数

        @OnClick(R.id.btnPost) void doPost(View view) {
            Button btnPost = (Button)view;
            mTvResult.setText("do post done " + btnPost.getText().toString());
        }

    还可以把强转都省了,直接在参数上使用要转的确切类型butterknife能帮你自动转型

        @OnClick(R.id.btnPost) void doPost(Button btnPost) {
            mTvResult.setText("do post done " + btnPost.getText().toString());
        }

  • 相关阅读:
    C++链式队列基本操作
    C++链栈基本操作
    C++顺序栈基本操作
    C++链表基本操作
    C/C++/JAVA
    C++操作链表
    How Many Maos Does the Guanxi Worth
    Heavy Transportation
    Frogger
    Til the Cows Come Home(Dijkstra)
  • 原文地址:https://www.cnblogs.com/lonkiss/p/6251835.html
Copyright © 2011-2022 走看看