大家好,我是爱吃土豆的土豆,今天来讲讲一款可以极大的提高我们的开发效率的插件---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
第三步自然是实现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了
快速的帮我们注册了点击事件,也不用自己手动实现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
网友评论