關(guān)于Library里面的R文件

Library中的R文件

前段時(shí)間跟項(xiàng)目老大提了個(gè)請求,就是將Butterknife加入到我們的項(xiàng)目中,結(jié)合android-butterknife-zelezny使用,這樣子不僅代碼簡潔,也可以減少一些findViewById的繁瑣過程,提升我們的開發(fā)效率.效果如下圖,是不是特別清爽,快捷.

MacDown Screenshot
MacDown Screenshot

經(jīng)過老大的同意以后,我開始加依賴,下載自動(dòng)注解插件,進(jìn)行自動(dòng)生成代碼,一氣呵成,神清氣爽.But問題立馬就暴露出來了,代碼如下:

      @OnClick({R2.id.m_button_pattern, R2.id.m_button_password})
       public void onClick(View view) {
        Log.d("xx", "========onClick=========");
        Intent intent = new Intent();
        switch (view.getId()) {
            case R2.id.m_button_pattern:
                intent.setClass(getApplicationContext(),MainActivity.class);
                Log.d("xx", "========onClick====MainActivity=====");
                break;
            case R2.id.m_button_password:
                intent.setClass(getApplicationContext(),SetPasswordLockActivity.class);
                Log.d("xx", "========onClick=====SetPasswordLockActivity====");
                break;
        }
        this.startActivity(intent);
    }

然后問題就出現(xiàn)了.由于我們的項(xiàng)目是在Library中開發(fā)(蛋疼得不行,很多限制),問題就是出在這里,請看下面的代碼:

        //Library中生成的R文件
        public static int activity_open_exit=0x7f04000d;
        //Module中生成的R文件
        public static final int abc_fade_out=0x7f050001;

所以在Library中無法使用switch語句進(jìn)而影響到了Butterknife的使用.

至于為什么在Library中無法使用參考谷歌文檔.經(jīng)過閱讀我們知道從ADT14開始Library中的R文件才從靜態(tài)常量變?yōu)榉浅A?因?yàn)槿绻诙鄠€(gè)Library中可能出現(xiàn)id沖突的問題.在ADT14以前則采用的是將所有的資源文件和相關(guān)的代碼重新隨著主項(xiàng)目一起編譯,導(dǎo)致編譯速度過慢.因此,從ADT14開始就變成了非常量的id了:

        int id = view.getId();
        switch (id) {
            case R.id.button1:
                action1();
                break;
            case R.id.button2:
                action2();
                break;
            case R.id.button3:
                action3();
                break;
        }

Android Studio也提供了一鍵轉(zhuǎn)換的快捷方式如下圖:

ConvertSwitch
ConvertSwitch

然后就變成了如下所示的代碼了.

        int id = view.getId();
        if (id == R.id.button1) {
            action1();
        } else if (id == R.id.button2) {
            action2();
        } else if (id == R.id.button3) {
            action3();
        }

因?yàn)檎屹Y料的原因又去看了下Github的Butterknife, JakeWharton大神終于在大家的強(qiáng)烈請求下更新了支持Library, 更新日志;

    Version 8.2.0 (2016-07-10)
    
    New: Support for library projects. Requires application of a Butter Knife Gradle plugin. See README for details.
    New: Generated code now emits R references instead of raw integer IDs.
    Fix: @OnPageChange listener binding now uses the 'add'/'remove' methods on ViewPager instead of 'set'.

算是意料之外的驚喜吧,下周一就把Butterknife加入我們的項(xiàng)目!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,881評論 25 709
  • Jake Wharton 是 Android 大神,同時(shí)也是開源狂魔。他開源的項(xiàng)目特點(diǎn)是小而美,且應(yīng)用廣泛,比如 ...
    geniusmart閱讀 12,396評論 3 79
  • 墓地一直很安靜。 守墓的,是個(gè)老頭。灰白的頭發(fā),滿臉的皺紋,黑麻麻的皮膚。手像扇子一樣大,每個(gè)指頭粗得好像彎不過來...
    陳大仙兒_英姐閱讀 760評論 3 8
  • 隨風(fēng)揚(yáng)起的長發(fā) 帆布雙肩背包 你依舊 那個(gè)蹦蹦跳跳的小女孩 做著做不完的夢
    S_Cat臭臭貓閱讀 296評論 2 2

友情鏈接更多精彩內(nèi)容