ListView 通過 addHeaderView(headerView) 添加頭部佈局,頭部包含多個可點擊控件(如圖片、按鈕),需分別響應點擊。
View header = LayoutInflater.from(context).inflate(R.layout.header, listView, false);
ImageView ivAvatar = header.findViewById(R.id.iv_avatar);
Button btnAction = header.findViewById(R.id.btn_action);
ivAvatar.setOnClickListener(v -> { /* 跳轉個人頁 */ });
btnAction.setOnClickListener(v -> { /* 執行操作 */ });
listView.addHeaderView(header); // 必須在 setAdapter 之前調用
優點:事件不經過 ListView 的 onItemClick,邏輯清晰,無位置偏移煩惱。
listView.setOnItemClickListener((parent, view, position, id) -> {
if (position == 0) { // HeaderView 永遠佔據 position 0
// 但無法區分 HeaderView 內部哪個控件被點擊
// 需在 HeaderView 佈局設置 android:descendantFocusability="blocksDescendants"
} else {
// 正常 Item 點擊,實際數據索引 = position - 1
}
});
缺點:HeaderView 內部多控件無法區分,且需處理焦點競爭。
setOnClickListener。