三、安卓插件butterknife的使用

作者: 爱吃土豆的土豆 | 来源:发表于2018-08-05 18:13 被阅读9次

           大家好,我是爱吃土豆的土豆,今天来讲讲一款可以极大的提高我们的开发效率的插件---butterknife。
    相信很多安卓老司(油)机(条)们都知道这款插件,但是很多萌新以及上课不用功的同学们还不知道,所以,土豆就单独来讲讲butterknife的使用。已经会使用的老油条们,em...,老司机们请自觉到教室最后一排睡觉
           那什么是butterknife呢,有同学会说土豆也是小菜鸟,说的话没那么权威,诺,给你们先看看百度百科的解释:


    butterknife百度百科.png

           请把findViewById和setOnClickListener圈起来,期末必考!好,那现在用土豆自己的话给你们说一遍,同学呐,butterknife就是用了可以让你少看一些nullpointerexception(空指针异常)并且能把你骨子里的惰性发挥到极致的插件,前排眼睛瞪的很大的那个同学,你不信吗,那我们来看这样一个场景,先看效果图

    butterknife的使用.gif

           这个案例很简单,一个页面有四个button,分别点击button时弹出对应的文字,相信每个同学都会。那说到这里,有些颜控的同学就会问了,土豆土豆,你上次不是才讲了如何使用颜值高toasty吗,你咋没用呢?嗯。。我是考虑到估计看这篇文章的同学都是萌新,所以为了减少知识点,才使用的toast
           咳咳,回到正题,如何去实现这个场景,大家肯定都是会的,那我就直接放代码了

    package com.example.administrator.potato.Activity;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    
    import com.example.administrator.potato.R;
    import com.example.administrator.potato.utils.ToastMessage;
    
    public class UseButterKnife extends AppCompatActivity implements View.OnClickListener{
        //存放组件实例
        private Button button1;
        private Button button2;
        private Button button3;
        private Button button4;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_use_butter_knife);
            initView();
            initData();
            register();
        }
    
        private void register() {
            //注册监听
            button1.setOnClickListener(this);
            button2.setOnClickListener(this);
            button3.setOnClickListener(this);
            button4.setOnClickListener(this);
        }
    
        private void initData() {
    
        }
    
        private void initView() {
            //获取组件实例
            button1=findViewById(R.id.button1);
            button2=findViewById(R.id.button2);
            button3=findViewById(R.id.button3);
            button4=findViewById(R.id.button4);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.button1:
                    Toast.makeText(this,"你点击了按钮一",Toast.LENGTH_SHORT).show();
                    //ToastMessage.toastSuccess("你点击了按钮一",true);
                    return;
                case R.id.button2:
                    Toast.makeText(this,"你点击了按钮二",Toast.LENGTH_SHORT).show();
                    //ToastMessage.toastSuccess("你点击了按钮二",true);
                    return;
                case R.id.button3:
                    Toast.makeText(this,"你点击了按钮三",Toast.LENGTH_SHORT).show();
                    //ToastMessage.toastSuccess("你点击了按钮三",true);
                    return;
                case R.id.button4:
                    Toast.makeText(this,"你点击了按钮四",Toast.LENGTH_SHORT).show();
                    //ToastMessage.toastSuccess("你点击了按钮四",true);
                    return;
            }
        }
    }
    

           为了实现这个效果:

           第一步应该是创建存放组件的容器 image.png
           第二步是获取组件实例 image.png
           第三步自然是实现View.OnClickListener接口,实现点击按钮弹出文字啦 image.png
           千万不要忘了最后一步,为button注册点击事件!(记得在刚学按照的时候,无数次忘了注册点击事件T.T) image.png
           说起来只需要很简单的四步,但是,最常出错的是第二步和第四步,先说第二步---寻找id,这是最让人苦恼的一步,这时候又有好事者要问了,土豆,这才四个id,有啥难的找的,我反手就是一个ctrl c +ctrl v,秒秒钟找好id。说的好,我要为你鼓掌,理想中我们找id都是这样
            //获取组件实例
            button1=findViewById(R.id.button1);
            button2=findViewById(R.id.button2);
            button3=findViewById(R.id.button3);
            button4=findViewById(R.id.button4);
    

           实际上却是这样的

            //获取组件实例
            button1=findViewById(R.id.button1);
            button2=findViewById(R.id.button2);
            button3=findViewById(R.id.button2);
            button3=findViewById(R.id.button4);
    

           这时候,如果运行程序,你会看到亲切的nullpointerexception错误,所以使用butterknife最爽的就是不用自己去寻找id,还可以避免找错id然后几个小时也找不到哪里错了,美滋滋。至于第四步,忘了注册点击事件的情况,butterknife也帮我们做了,这对于不细心的同学是一个极大的帮助。在程序中,出现bug不要紧,因为ide会有提醒,一般有经验的童鞋能很快找到错误处并修改。但是最恶心的是程序能运行,但是就是运行的效果和你想的不一样。。。
           好了,为什么要使用butterknife相信大家已经知道了,那么如何使用呢,so easy
    (1)下载插件(只说android studio)
    依次点击File->settings->plugins


    image.png
    image.png

    下载后安卓后重启android studio就可以了
    (2)使用butterknife
           还是刚刚的我们写好的代码


    image.png

    鼠标放在R.layout.activity_use_butter_knife上,然后依次点击ALT+Ins,出现这样一个框,看到红色箭头指向的位置了吗,成功安装butterknife后就会出现这个选项,如果你的程序没有,说明没有正确安装这个插件或者安装错了插件,仔细找找原因


    image.png

    点击Generate ButterKnife Injections后 会自动把这个布局下的所有设置了id的组件全部显示在如图画面中


    image.png
           接下来是重点了,麻烦大家把身边睡觉的叫起来一下,可以看到这个窗口中有四列:
    1、Element:在我们需要注册的id前面勾选此框,就可以快速获取该id的实例,比如这样,我们把四个button的Element都勾选中
    image.png

    如此一来button1,button2,button3,button4就是布局中的四个button的实例了,我们可以直接使用,不需要先创建接收button的容器,再寻找id了

    2、OnClick:快速创建点击事件,比如这样,我们把四个button的OnClick都勾上 image.png
    快速的帮我们注册了点击事件,也不用自己手动实现onClick接口了,美滋滋
    3、Variable Name
    顾名思义,变量名,你可以为这个id的实例起一个符合你们代码规范的名字啦,像什么阿三、阿四啦,就是任性
           最后,我们来看看使用butterknife之后,我们实现的代码:
    package com.example.administrator.potato.Activity;
    
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Toast;
    
    import com.example.administrator.potato.R;
    
    import butterknife.ButterKnife;
    import butterknife.OnClick;
    
    public class UseButterKnife extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_use_butter_knife);
            ButterKnife.bind(this);
            initView();
            initData();
            register();
        }
    
        private void register() {
        }
    
        private void initData() {
        }
    
        private void initView() {
        }
    
    
        @OnClick({R.id.button1, R.id.button2, R.id.button3, R.id.button4})
        public void onViewClicked(View view) {
            switch (view.getId()) {
                case R.id.button1:
                    Toast.makeText(this,"你点击了按钮一",Toast.LENGTH_SHORT).show();
                    break;
                case R.id.button2:
                    Toast.makeText(this,"你点击了按钮二",Toast.LENGTH_SHORT).show();
                    break;
                case R.id.button3:
                    Toast.makeText(this,"你点击了按钮三",Toast.LENGTH_SHORT).show();
                    break;
                case R.id.button4:
                    Toast.makeText(this,"你点击了按钮四",Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    }
    
    

           可以看到,通过butterknife的帮助,我们只要写button的点击事件的就行了,省去了原来的那些操作呢
           1、创建存放组件实例的容器
           2、寻找id
           3、注册onClick接口
    当布局文件中有很多组件的时候,butterknife的作用尤其明显,无论有多少id,我们只需要通过butterknife简单的勾选上我们需要的id就行了,是不是很方便呐(都给我回答是。。)
    总结:
    1、butterknife不仅仅可以注册activity中的view,也可以注册适配器中的view,因为后面会写如何提高适配器的效率,所以放到那时候讲,因为在适配器中findViewByid也很烦人,通过butterknife我们依旧可以一键获取view的id,大大的提高了我们开发的效率和减少我们犯低级错误的概率,一个猿,时间应该追求更加炫酷的实现和优雅的代码,而不是天天在那里写findViewByid
    2、今天因为是周末,所以写的有点详(啰)细(嗦),没对象,所以时间多,就是任性T.T
    3、本项目的码云地址:https://gitee.com/fightPotato/potato.git

    相关文章

      网友评论

        本文标题:三、安卓插件butterknife的使用

        本文链接:https://www.haomeiwen.com/subject/qzvbvftx.html