一捂掰、配置gradle
1员咽、現(xiàn)在根目錄下的build.gradle里面聲明編譯插件
buildscript {
? ? ? ? repositories {
? ? ? ? ? ? ? jcenter()
? ? ? ? }
? ? ? ? dependencies {
? ? ? ? ? ? ?classpath 'com.android.tools.build:gradle:2.0.0'
? ? ? ? ? ? ?classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
? ? ? ? ?}
}
2园匹、在module目錄下的build.gradle中聲明
apply plugin: 'android-apt'
dependencies {
? ? ? ? ?compile 'com.jakewharton:butterknife:8.2.1'
? ? ? ? ?apt 'com.jakewharton:butterknife-compiler:8.2.1'
}
二琅绅、基礎(chǔ)使用
上面已經(jīng)配置好了gradle季惯,接下來我們就可以使用他了鼓鲁,好邮辽,下面先貼如何使用的代碼:
public class MainActivity extends AppCompatActivity {
? ? ? ?@BindView(R.id.tv_show)
? ? ? ?TextViewtv_show;
? ? ? @Override
? ? ? ?protected void onCreate(Bundle savedInstanceState) {
? ? ? ? ? ? ? ?super.onCreate(savedInstanceState);
? ? ? ? ? ? ? ?setContentView(R.layout.activity_main);
? ? ? ? ? ? ? ?ButterKnife.bind(this);
? ? ? ? ? ? ? ? tv_show.setText("hello, I had bind by BindView, ok");
? ? ? ?}
? ? ? @OnClick(R.id.tv_show)
? ? ? public voidshowOnClick(){
? ? ? ? ? Toast.makeText(this,"bind by OnClick",Toast.LENGTH_SHORT).show();
? ? ? }
@OnClick({R.id.tv_add,R.id.tv_delete})
public voidclickView(View view){
? ? ? switch(view.getId()){
? ? ? ? caseR.id.tv_add:
? ? ? ? ? ? ? Toast.makeText(this,"tv_add",Toast.LENGTH_SHORT).show();
? ? ? ? ? ? ? break;
? ? ? ? ?caseR.id.tv_delete:
? ? ? ? ? ? ? ?Toast.makeText(this,"tv_delete",Toast.LENGTH_SHORT).show();
? ? ? ? ? ? ? ?break;
? ? ? ? }
? ?}
}
優(yōu)點(diǎn):
1唠雕、再也不用findViewById啦
第一步:@BindView(R.id.tv_show)
TextView tv_show;
第二步:在onCreate中,聲明:
ButterKnife.bind(this);
經(jīng)過上面兩步吨述,就已經(jīng)初始化tv_show對(duì)象了岩睁,可以直接使用
2、再也不用setOnClickListener啦
如上面所示揣云,對(duì)于任何一個(gè)View可以:
@OnClick(R.id.tv_show)
public void showOnClick(){
Toast.makeText(this,"bind by OnClick", Toast.LENGTH_SHORT).show();
}
只要聲明點(diǎn)擊對(duì)象的ID即可捕儒,這樣對(duì)應(yīng)id的組件就有了點(diǎn)擊事件
3、可以批量設(shè)置點(diǎn)擊事件啦邓夕,按以下步驟做即可:
@OnClick({R.id.tv_add,R.id.tv_delete})
public void clickView(View view){
? ? ?switch (view.getId()){
? ? ? ? ? ? ? case R.id.tv_add:
? ? ? ? ? ? ? ? ? ?Toast.makeText(this,"tv_add", Toast.LENGTH_SHORT).show();
? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ?case R.id.tv_delete:
? ? ? ? ? ? ? ? ? ?Toast.makeText(this,"tv_delete", Toast.LENGTH_SHORT).show();
? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ?}
? ?}
}
4刘莹、可以將多個(gè)View放在一個(gè)列表或數(shù)組
@BindViews({R.id.tv_add,R.id.tv_update})
ListallViews;
需要注意的地方:
1、使用butterKnife的域或者方法不能用private焚刚、static修飾
2栋猖、在fragment中使用和Activity中使用只有一點(diǎn)不同。如下所示:
public class MyFragment extends Fragment {
? ? ? ?@BindView(R.id.tv_fragment)
? ? ? ?TextViewtv_fragment;
? ? ? ?@Override
? ? ? public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
? ? ? ? ? ? ?View view=inflater.inflate(R.layout.fragment_test,container,false);
? ? ? ? ? ? ?ButterKnife.bind(this,view);
? ? ? ? ? ? ?return view;
? ? ? }
}