自訂 PagerAdapter 在 instantiateItem 中 inflate 佈局,但在 Activity.onCreate 中呼叫 findViewById(R.id.myButton) 卻得到 null。
ViewPager 尚未設定 Adapter,子視圖未建立。Activity 的佈局僅包含 ViewPager,按鈕位於子頁面佈局(layout1.xml),不在 Activity 的視圖樹中。ViewPager viewPager = findViewById(R.id.viewPagerLayout);
viewPager.setAdapter(new CustomPagerAdapter());
@Override
public Object instantiateItem(ViewGroup container, int position) {
LayoutInflater inflater = LayoutInflater.from(container.getContext());
View view = inflater.inflate(position == 0 ? R.layout.layout1 : R.layout.layout2, container, false);
container.addView(view);
// 在這裡 findViewById,view 為當前頁面根視圖
Button btn = view.findViewById(R.id.myButton);
btn.setOnClickListener(v -> { /* 處理點擊 */ });
return view;
}
public interface OnPageButtonClickListener {
void onButtonClick(int position);
}
// Adapter 建構子傳入 listener
// instantiateItem 內 btn.setOnClickListener(v -> listener.onPageButtonClick(position));
ViewPager 的子視圖由 PagerAdapter 管理,不在 Activity 佈局層級。instantiateItem 回傳的 View 上呼叫 findViewById。onCreate 直接尋找子頁面元件。