ButterKnife是一個(gè)專注于Android系統(tǒng)的View注入框架促脉,能夠簡(jiǎn)化代碼魔吐,再也不用寫(xiě)大量的findViewById以及setOnClickListener代碼领炫,這東東真心不錯(cuò)哦,很方便浪规,嘖嘖嘖结蟋。
原本以為脯倚,用AndroidStudio使用ButterKnife只要在項(xiàng)目中的Module:app的gradle文件中加入compile'com.jakewharton:butterknife:8.2.1' 就OK了,結(jié)果在按照文檔的方式來(lái)給控件設(shè)置點(diǎn)擊事件嵌屎,一直無(wú)效獲取不到控件的點(diǎn)擊事件推正,于是在初始化的時(shí)候又嘗試給控件手動(dòng)設(shè)置一個(gè)點(diǎn)擊事件,啊噢宝惰!突然報(bào)空指針錯(cuò)誤了植榕,檢查代碼,ButterKnife.bind(this)這句話尼夺,確實(shí)是寫(xiě)在setContentView()方法后面呀尊残,無(wú)奈各種查找資料呀,貌似是因?yàn)锽utterKnife更新了淤堵,最新的引入方式變了嘍寝衫,反正我按照github上的方式來(lái)把ButterKnife加入項(xiàng)目,就成功解決了問(wèn)題拐邪。
今天2016.12.26慰毅,來(lái)更新下此篇文章,因?yàn)樽罱俅卧陧?xiàng)目中引入ButterKnife庙睡,發(fā)現(xiàn)又出了點(diǎn)小小問(wèn)題事富,它又更新啦,so乘陪,我也要更新下使用過(guò)程。
先附上ButterKnife地址:
項(xiàng)目網(wǎng)頁(yè)版example地址:http://jakewharton.github.io/butterknife/
GitHub地址:https://github.com/JakeWharton/butterknife
一. 配置project的build.gradle雕擂,添加plugin:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.jakewharton:butterknife-gradle-plugin:8.8.1'
}
}
二. 配置module的build.gradle:
apply plugin: 'com.android.library'
apply plugin: 'com.jakewharton.butterknife'
android {
...
}
dependencies {
compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
}
看來(lái)還是得到GitHub上面查看怎么配置才行呢啡邑,反正我的項(xiàng)目中Module:app的build.gradle是這樣的:
Project的build.gradle:
再編譯,發(fā)現(xiàn)出錯(cuò)啦井赌,報(bào)錯(cuò)為 Could not find method annotationProcessor() for arguments
找資料谤逼,解決方法:把Android Studio更新到 2.2.0+版本,更新dependencies中的gralde也為2.2.0+就OK啦~
好啦仇穗,一切都正常了流部,反正也就是配置的時(shí)候出錯(cuò)了,然后就是使用了纹坐,首先就要在setContentView()方法執(zhí)行了之后枝冀,ButterKnife.bind(this);然后用控件就在定義每個(gè)控件上面寫(xiě)@BindView(R.id.xx)就聲明了控件啦,于是就直接使用啦,真的很方便果漾,詳細(xì)介紹官網(wǎng)都有球切,看看就會(huì)了,我這里直接寫(xiě)的一個(gè)BaseActivity去使用ButterKnife.bind(this)讓其他Activity去繼承它绒障,就不用寫(xiě)很多次重復(fù)的代碼啦吨凑,嘖嘖嘖。
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(getLayoutId());
ButterKnife.bind(this);
}
protected abstract int getLayoutId();
}
其他Activity使用依賴注入的局部代碼
點(diǎn)擊事件:
加一句話嚷炉,ButterKnife是個(gè)預(yù)編譯技術(shù)。
更新于2017.8.15 突然發(fā)現(xiàn)探橱,ButterKnife還可以綁定字符串申屹,像這樣:
@BindString(R.string.login_error) String loginErrorMessage;