1. 程式人生 > >ButtonKnife在library中引用“Attribute value must be constant”報錯解決

ButtonKnife在library中引用“Attribute value must be constant”報錯解決

最近在搞專案元件化的事,按業務分成獨立的module,在release的時候就要把業務module設定成library,但是發現設定成library時候原先的buttonknife繫結view的程式碼全部標紅下劃線,提示“Attribute value must be constant”,這是因為library中R.id.xxx 取R中變數的時候並非是final型別,“duang”尼瑪。這是要把以前的@BInd全部改成findviewbyid嗎。嚇老子一跳,結果肯定是沒有啊。網上也有解決辦法,但是好像都寫得不全或者不清晰。下面來說說解決辦法,3步保你成功:

ButterKnife在8.2.1中支援在Library內部使用檢視注入,由於我的版本還是7.0的,所以趕緊升級版本。
1

在專案及的gradle的dependencies中如下新增:

dependencies {
 classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
 classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
 }

2 在appmodule和library中新增(注:只要用到都要新增)

apply plugin: 'com.jakewharton.butterknife'
apply plugin: 'android-apt'

dependencies {
compile 'com.jakewharton:butterknife:8.4.0'
apt 'com.jakewharton:butterknife-compiler:8.4.0' }

3 在library繫結view如下(用R2代替R):

@BindView(R2.tv_account)  TextView tvAccount;

此處如果會提示“程式包R2不存在”,多rebuild幾遍就行了。

相關推薦

ButtonKnife在library引用Attribute value must be constant解決

最近在搞專案元件化的事,按業務分成獨立的module,在release的時候就要把業務module設定成library,但是發現設定成library時候原先的buttonknife繫結view的程式碼全部標紅下劃線,提示“Attribute value must

【日常踩坑】ButterKnife:Attribute value must be constant

Attribute value must be constant 在搜尋Attribute value must be constant後得到這樣的說明: Injection does not work in library projects 意為

解決butterknife 依賴庫使用的Attribute value must be constant問題

在我們使用android studio 通常會把常用的程式碼,新建成module在library中引入butterknife的依賴: compile ‘com.jakewharton:but

altium designer dxf檔案匯入到PCB出現一片空白或匯入解決辦法

這類現象出現的主要原因是,DXF裡面的很多元素,Altium中無法識別造成的,無論我們怎麼匯入都是無法匯入成功的,我們可以按照如下步驟進行操作: 這個時候我們可以在CAD中開啟這個DXF檔案,然後框選

java.sql.SQLException: The server time zone value '???ú±ê×??±??'的解決方案

問題描述: 利用JDBC連線資料時,會報錯誤具:java.sql.SQLException: The server time zone value '???ú±ê×??±??' is unrecognized or represents more than one time zone. Yo

WSDL控制檯wsimport命令生成客戶端程式碼解決方案

在使用webservice時,利用jdk自帶的wsimport.exe生成客戶端程式碼時發生如下錯誤: 正在解析 WSDL... [ERROR] Unexpected end of file from server 無法讀取 WSDL 文件: http://localhos

java使用switch casecase expressions must be constant expressions

一、發現問題 private int CLICK_QUERY = 1; private int CLICK_RESET = 2; @Override public void onClick(View v) {  int tag = (Integer) v.getTag(); &nb

Type of the default value for 'searches' prop must be a function 如何解決vue報出的這種錯誤

https://google.com/#q=vue%2Frequire-valid-default-prop  Type of the default value for 'searches' prop must be a function     src/base/s

java的switch使用 case expressions must be constant expressions,Duplicate case

java中的switch問題,有時報告case expressions must be constant expressions,原因是缺少final;另外如果報告:Duplicate case,則是switch中的case值重複,用Java寫時,不會像c一樣,case是什

ValueError: fill value must be in categories.

執行下面程式碼時報錯:ValueError: fill value must be in categories import pandas as pd; import numpy as np; df = pd.DataFrame({'a':[1, 2,

錯誤ValueError: malformed SHA512 hash (checksum must be exactly 86 chars)解決辦法

flask這個報錯多半是ORM建立數據表的時候,密碼列給的長度不足導致的。比如把password_hash = db.Column(db.String(64))改為password_hash = db.Column(db.String(120)然後重新建立表即可。原因:表沒有足夠空間放置加密後的數據,sha5

【Kotlin】spring boot項目,在Idea下啟動,@Configuration class 'BugsnagClient' may not be final.

post open conf png spa temp 技術 dea and 報錯如下: Exception encountered during context initialization - cancelling refresh attempt: org.spr

Android引用sweet-alert-dialog以及遇到的問題解決

posit merger 不一致 failed sch sweet 一個 問題解決 alert 概述 sweet-alert-dialog是一個帶動畫效果的自定義對話框樣式,可以讓你的Android程序的對話框優美很多。GitHub地址 Android Studio中引用

解決JDBC“The server time zone value '???ú±ê×??±??' is...”(即MySQL時區錯誤問題)

最近寫jsp,經常遇到MySQL時區錯誤的問題 每次遇到都要找一下設定的程式碼,太麻煩了,就自己寫篇部落格記錄一下 首先解決這個報錯主要有兩種方法,第一是在寫連線的URL時寫上一個“&serverTimezone = GMT” 語句(如果需要用到GMT+8的時區,需要

使用jdbcTemplate.queryForRowSet()遇到UncategorizedSQLException:Invalid precision value. Cannot be less than zero解決辦法

某次在做專案時用到了spring2.5的jdbcTemplate.queryForRowSet()去連線Oracle 11g,執行時出現如下異常: org.springframework.jdbc.UncategorizedSQLException: PreparedSta

iOS專案引用多個第三方庫引發衝突的解決方法

這個真蛋疼~~~~ 解決方法如下: iOS程式開發過程中引用多個第三方庫時會出現類名重疊,導致衝突,具體的衝突錯誤提示如下: duplicate symbol OBJC_IVAR$_AFHTTPSessionManager._requestSerializer in:

Eclipse引用了lint工具,打包時報

Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead 出現該問題原因:由於Eclipse中引入了li

mybatis 設定mysql自增主鍵Incorrect integer value: '' for column 'class_id' at row 1

按道理自增主鍵這樣配置 <insert id="insertAlbum" useGeneratedKeys="true" keyProperty="classId"> insert into attachment_class VA

Ubuntu 14.04 samba提示bad talloc magic value - access after free

sambaUbuntu 14.04 samba提示bad talloc magic value - access after free報錯原因:samba版本和libtalloc2版本不一致導致的解決:重裝下samba或libtalloc2(apt-get install samba或libtalloc2)本

已經設置utf8的mysql cmd插入中文執行解決方法

客戶 res img 說明 設置 -1 bsp 插入 gbk 說明cmd客戶端的字符集是gbk,結果集也要設置為gbk。 使用語句 set character_set_client=gbk; set character_set_results=gbk; 就