ViewPager 頁面包含 Button,在 Activity 中直接 findViewById 獲取 Button 並設置 OnClickListener 導致 ClassCastException 或點擊無響應。
ViewPager 的頁面視圖由 PagerAdapter 動態創建(instantiateItem),不在 Activity 的 setContentView 佈局中,Activity.findViewById 找不到該 Button。
public class ViewPagerAdapter extends PagerAdapter {
private Context context;
public ViewPagerAdapter(Context ctx) { this.context = ctx; }
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = LayoutInflater.from(context).inflate(R.layout.page_layout, container, false);
Button btn = view.findViewById(R.id.button1);
btn.setOnClickListener(v -> {
// 處理點擊邏輯,可通過接口回調 Activity
});
container.addView(view);
return view;
}
// ... 其他必要方法
}
public interface OnPageButtonClickListener {
void onButtonClick(int position);
}
// Adapter 構造傳入 listener,點擊時調用 listener.onButtonClick(position)
動態視圖的事件綁定必須在視圖創建處(Adapter、Fragment、Dialog 等)進行,不要在外層 Activity 中硬找 ID。