首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 動態創建按鈕獲取點擊事件:使用 View 實例判斷而非 ID

     編輯:程式設計綜合問答

問題

循環創建 `ToggleButton` 並 `setOnClickListener(this)`,但在 `onClick(View v)` 中用 `switch(v.getId())` 判斷,因 ID 為動態遞增變量,無法在 case 中使用常量。

解決:直接比較 View 實例

// 成員變量保存引用
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;
        }
    }
}

替代:為每個按鈕設置獨立 Listener (Lambda)

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`),每個按鈕擁有專屬邏輯,**最推薦**。

關於 ID

  • `View.setId(int)` 僅用於 `findViewById` 查找、佈局相對定位、自動保存狀態。
  • 動態創建的 View **無需設置 ID** 即可正常工作,若需 ID 可用 `View.generateViewId()` (API 17+)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved