循環創建 `ToggleButton` 並 `setOnClickListener(this)`,但在 `onClick(View v)` 中用 `switch(v.getId())` 判斷,因 ID 為動態遞增變量,無法在 case 中使用常量。
// 成員變量保存引用
private ToggleButton[] buttons;
@Override
protected void onCreate(Bundle savedInstanceState) {
buttons = new ToggleButton[XML.size()];
for (int i = 0; i < XML.size(); i++) {
ToggleButton b = new ToggleButton(this);
b.setOnClickListener(this);
buttons[i] = b; // 保存引用
layout.addView(b);
}
}
@Override
public void onClick(View v) {
for (int i = 0; i < buttons.length; i++) {
if (v == buttons[i]) { // 實例比較
Log.d("Button", "Button " + i + " pressed");
break;
}
}
}
for (int i = 0; i < XML.size(); i++) {
final int index = i;
ToggleButton b = new ToggleButton(this);
b.setOnClickListener(v -> {
Log.d("Button", "Button " + index + " pressed");
});
layout.addView(b);
}
捕獲循環變量 `index`(需 `final` 或 `effectively final`),每個按鈕擁有專屬邏輯,**最推薦**。