ButterKnife
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