方案一 :可以用 if來替代 如下
原因:在Android Studio中使用JDK17以上版本,會出現switch語句報錯"Constant expression required
"的問題,這是因為在JDK17中switch語句的條件表示式支援使用列舉型別,而這個特性還沒有被支援。
方案2:換JDK版本
因為JDK17暫時不支援這個特性,可以換成17以下版本可以,JDK8和JDK11都可以
方案3:使用列舉替換
不過這個太麻煩,不太推薦
首先,建立一個列舉類,用於表示不同的按鈕。例如:
1 public enum ButtonType { 2 BTN_ALERT, 3 BTN_OTHER1, 4 BTN_OTHER2, 5 // 新增更多按鈕型別 6 }
接下來,在你的Activity或Fragment中,宣告一個成員變數來表示當前按鈕的型別:
1 private ButtonType currentButtonType;
然後,將列舉型別與按鈕關聯起來。你可以使用Map來將按鈕的資源ID與列舉型別進行對映。在Activity的onCreate
方法中,或者Fragment的onCreateView
方法中,進行如下操作:
1 Map<Integer, ButtonType> buttonTypeMap = new HashMap<>(); 2 buttonTypeMap.put(R.id.bnt_alert, ButtonType.BTN_ALERT); 3 buttonTypeMap.put(R.id.bnt_other1, ButtonType.BTN_OTHER1); 4 buttonTypeMap.put(R.id.bnt_other2, ButtonType.BTN_OTHER2); 5 // 新增更多按鈕型別的對映 6 7 // 設定按鈕的點選事件 8 findViewById(R.id.bnt_alert).setOnClickListener(v -> onButtonClick(ButtonType.BTN_ALERT)); 9 findViewById(R.id.bnt_other1).setOnClickListener(v -> onButtonClick(ButtonType.BTN_OTHER1)); 10 findViewById(R.id.bnt_other2).setOnClickListener(v -> onButtonClick(ButtonType.BTN_OTHER2)); 11 // 新增更多按鈕的點選事件
最後,在你的Activity或Fragment中實現onButtonClick
方法,根據列舉型別來執行相應的邏輯:
1 private void onButtonClick(ButtonType buttonType) { 2 // 根據按鈕型別執行相應的邏輯 3 switch (buttonType) { 4 case BTN_ALERT: 5 // 處理 BTN_ALERT 按鈕點選事件 6 break; 7 case BTN_OTHER1: 8 // 處理 BTN_OTHER1 按鈕點選事件 9 break; 10 case BTN_OTHER2: 11 // 處理 BTN_OTHER2 按鈕點選事件 12 break; 13 // 處理更多按鈕型別的點選事件 14 } 15 }
透過這種方式,你可以使用列舉型別來表示不同的按鈕,並在點選事件中使用列舉型別,而不是直接使用資源ID,也能解決問題。