ButterKnife可以将程序猿从麻烦的findViewById和setOnClickListener当中解脱出来,举例说明
如下图所示,界面当中包含有三个TextView和三个Button,
按照通常的写法,首先得定义变量,然后通过findViewById函数一一进行实例化,
单击事件也必须要每个View来设置setOnClickListener。如下所示
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button mBtn1;
private Button mBtn2;
private Button mBtn3;
private TextView textView1;
private TextView textView2;
private TextView textView3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找view
mBtn1 = (Button) findViewById(R.id.button1);
mBtn2 = (Button) findViewById(R.id.button2);
mBtn3 = (Button) findViewById(R.id.button3);
textView1 = (TextView) findViewById(R.id.first);
textView2 = (TextView) findViewById(R.id.second);
textView3 = (TextView) findViewById(R.id.third);
//设置点击事件
mBtn1.setOnClickListener(this);
mBtn2.setOnClickListener(this);
mBtn3.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v == mBtn1) {
Toast.makeText(this, "button1点了也没啥用", Toast.LENGTH_SHORT).show();
}else if(v == mBtn2){
Toast.makeText(this, "button2点了也没啥用", Toast.LENGTH_SHORT).show();
}else if(v == mBtn3){
Toast.makeText(this, "button3点了也没啥用", Toast.LENGTH_SHORT).show();
}
}
}
如果项目当中引入了butterknife框架,则代码可以简化,
而且在Fragment和Adapter当中也可以使用,只是参数有变化。
public class SecondActivity extends AppCompatActivity { @BindView(R.id.button1) Button mBtn1; @BindView(R.id.button2) Button mBtn2; @BindView(R.id.button3) Button mBtn3; @BindViews({R.id.first,R.id.second,R.id.third}) List<TextView> textViewList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this);//关联ButterKnife for(int i=0;i<textViewList.size();i++){ textViewList.get(i).setText("第"+i+"个"); } } @OnClick({R.id.button1,R.id.button2,R.id.button3}) void click(View view){ if(view == mBtn1) { Toast.makeText(this, "button1点了也没啥用", Toast.LENGTH_SHORT).show(); }else if(view == mBtn2){ Toast.makeText(this, "button2点了也没啥用", Toast.LENGTH_SHORT).show(); }else if(view == mBtn3){ Toast.makeText(this, "button3点了也没啥用", Toast.LENGTH_SHORT).show(); } } }
定义的mBtn变量可以直接使用,而且也可以一次性指定多个View的单机事件。
以下为在fragment当中的使用方法
@Override
View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fancy_fragment, container, false);
//参数多了一个view
ButterKnife.inject(this, view);
return view;
}
}
使用butterKnife只需要在项目当中加入以下代码即可
dependencies {
compile 'com.jakewharton:butterknife:8.4.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
}
Butterknife的项目地址为:https://github.com/JakeWharton/butterknife