Android組件化開發(fā)的介紹網(wǎng)上很多辟汰,如果還不熟悉的Android組件化開發(fā)的話烛恤,推薦去看一篇文章: Android組件化方案
廓潜,這篇文章寫的很詳細(xì)抵皱,后面也有Demo,我也是看這篇文章辩蛋。不過這篇文章沒有介紹組件化使用Butterknife
的叨叙,后面我直接在 Common 組件
中引用,沒想到直接報(bào)空指針堪澎,然后各種Google擂错,終于找到了解決的辦法,在這里記錄一下樱蛤。
首先钮呀,需要在整個(gè)Project的的build.gradle中添加如下代碼:
buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.jakewharton:butterknife-gradle-plugin:8.8.1'
}
}
然后在Common組件
中添加:
apply plugin: 'com.jakewharton.butterknife'
dependencies {
...
compile rootProject.ext.dependencies["Butterknife"]
}
這里我做了全局的Gradle配置,看不到版本昨凡,可以去選擇最新的版本爽醋,地址是:Butterknife
最后,需要在每一個(gè)Module組件
里面添加:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
annotationProcessor rootProject.ext.dependencies["Butterknife-compiler"]
}
這個(gè)是必須的便脊,否則會(huì)出現(xiàn)空指針蚂四。
最后,在Java代碼中哪痰,使用R2
代替R
遂赠,這樣就可以實(shí)現(xiàn)ButterKnife
在組件化開發(fā)過程中出現(xiàn)的空指針問題。
實(shí)驗(yàn)了一下晌杰,這樣雖然暫時(shí)解決了問題跷睦,但是還有很坑。所以肋演,按照目前來看抑诸,組件化開發(fā)的話還是建議放棄ButterKnife烂琴,還是用會(huì)findViewById,用這個(gè)可以在BaseActivity中做一個(gè)封裝蜕乡,利用泛型減少類型強(qiáng)制轉(zhuǎn)換操作奸绷,附上代碼:
private SparseArray<View> mCommonViews;
* 通過viewId獲取控件
*
* @param viewId 資源id
* @return
*/
@Override
public <V extends View> V findView(@IdRes int id) {
View view = mCommonViews.get(id);
if (view == null) {
view = super.findViewById(id);
mCommonViews.put(id, view);
}
return (V) view;
}
@Override
public View findViewById(@IdRes int id) {
return findView(id);
}