1. 程式人生 > >不用在介面中再定義View 也不用再寫 findViewById 省掉一些介面並不需要的程式碼

不用在介面中再定義View 也不用再寫 findViewById 省掉一些介面並不需要的程式碼

之前一直在用ButterKnife也覺得挺好用的,只是最近在做專案模組化的時候發現在子模組之中的id並非為常量導致子模組所有註解報錯,雖然找到一些解決的辦法不過都比較麻煩,而且我覺得也有些曲線救國的感覺。於是我開始用起了最傳統的方法findViewById 結果就出現了 介面之中 一大堆的 View 定義 以及 一大堆的findViewById 的呼叫,這讓稍微有點強迫症的我並受不了。 

例如這樣:

TextView textView;

ImageView ImageView;

ImageView ImageView;

ImageView ImageView;

void init(View view) {

    textView = view.findViewById();

    ImageView = view.findViewById();

    ImageView = view.findViewById();

}

甚至更多 這樣我十分鬱悶。後來我想到在用Lombok 的時候 發現 這個外掛可以騙過編譯器讓編譯器認為該類已經有了get和set方法那為什麼不能讓我們的編譯器認為已經有了這些變數呢?這樣就利用Lombok的原始碼寫了這款外掛!雖然過程曲折不過最終還是弄出來了,目前用在我的專案中感覺還挺好!

來看看怎麼用吧!

比如這是你之前的程式碼:

原始碼
標題

這是用了這個外掛之後的程式碼:

後代碼

是不是 text的定義沒有了 而packageName是你的資源目錄包名 value 是你layout的名稱

然後你需要將https://github.com/ivarxiong/jaina_compiler 下的  ':jaina_compiler', ':jaina_annotation', ':jaina_api' 這三個model匯入你的專案之中

然後再在dependencies 中加入這兩行就可以了

dependencies {
    compile project(':jaina_api')
    annotationProcessor project(':jaina_compiler')
}

原理也就是外掛在編寫程式碼是讓ide 覺得有這些變數,而實際這些變數的產生是在編譯的過程中!

外掛的應用就是這樣了,感覺還是挺方便的。kotlin 請忽略,因為這個做法就是來源於kotlin,用過kotlin的你懂的!

歡迎大家一起交流,以及建議,有問題可以發我郵箱[email protected] 求大家在githup上給個星唄

最後,為了聯盟!