LinearLayout container = findViewById(R.id.myLinearLayout);
int counter = 0;
Button addBtn = findViewById(R.id.addBtn);
addBtn.setOnClickListener(v -> {
ImageView image = new ImageView(this);
image.setImageResource(R.drawable.app_icon);
image.setId(View.generateViewId()); // API 17+ 唯一 ID
image.setTag(counter); // 可攜帶額外資料
// 設定點擊事件
image.setOnClickListener(clickView -> {
int idx = (int) clickView.getTag();
Toast.makeText(this, "Clicked image #" + idx, Toast.LENGTH_SHORT).show();
// 呼叫你的業務函式
handleImageClick(idx);
});
container.addView(image);
counter++;
});
private void handleImageClick(int index) {
// 具體業務邏輯
}
View.generateViewId() 產生不重複 ID(API 17+),避免硬編碼衝突。setTag()/getTag() 攜帶索引或資料物件。LinearLayout orientation 排列)。container.removeViewAt(index) 或 container.removeView(view)。若動態項目眾多、需回收複用、支援動畫,強烈建議改用 RecyclerView + Adapter,效能與維護性更佳。