安卓Warning:Resource IDs will be non-final in Android Gradle Plugin version 5.0, avoid using th
阿新 • • 發佈:2021-02-11
問題描述
對三個按鈕進行監聽,用Id分辨哪一個按鈕是哪一個。degub沒有error,但是在commit的時候有點tip,然後review了下發現三個Warning!!! - Warning:(40, 22) Resource IDs will be non-final in Android Gradle Plugin version 5.0, avoid using them in switch case statements
作為一個垃圾碼農,0Warining是一種習慣。
// 按鈕監聽方法
class MyClickListener implements View.OnClickListener{
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_back:
Log.d("btn listener:", "btn_back is clicked");
break;
case R.id.btn_forget:
Log.d( "btn listener:", "btn_forget is clicked");
break;
case R.id.btn_login:
Log.d("btn listener:", "_login is clicked");
break;
default:
Log.d("btn listener:" ,"something is clicked");
break;
}
}
}
問題查詢
大致意思是Id已經在新版本中一種不是final了,而是可以修改的變數。。。。也就是靠資源Id無法辨別誰是誰???我去,那用什麼分辨你是你,我是我???
解決辦法
谷歌開發者網站一時半會上不去。。。。找不到官方原版就暫時bing一下吧。。
Resource IDs will be non-final in Android Gradle Plugin version 5.0, avoid using them in switch case - 世外大帝:三種方案: 強制壓制警告、if、手動final
Non-constant Fields in Case Labels - Android Studio Project Site:用if else 替代switch
The solution for this is simple: Convert the switch statement into an if-else statement.
public void onClick(View v) {
int id = v.getId();
if( id == R.id.btn_back){
Log.d("btn listener:", "btn_back is clicked");
}else if( id == R.id.btn_forget){
Log.d("btn listener:", "btn_forget is clicked");
}else if( id == R.id.btn_login){
Log.d("btn listener:","something is clicked");
}
}
參考
- Resource IDs will be non-final in Android Gradle Plugin version 5.0, avoid using them in switch case statements - Sufian:原因:這樣會build的更快
- Non-constant Fields in Case Labels - Android Studio Project Site:官方解釋居然是用if else 替代switch?????阿哲假官方??
- Resource IDs will be non-final in Android Gradle Plugin version 5.0, avoid using them in switch case - 世外大帝:三種方案
- 安卓大變天!ButterKnife被棄用:Resource IDs will be non-final in Android Gradle Plugin version 5.0 - Eternity嵐:使用BindView辦法解決ButterKnife被棄用,雖然問題不是用一個,但是錯誤型別相似