在 PagerAdapter 的 instantiateItem 中為 Button 設置 OnClickListener 卻無響應?常見原因是重複 inflate 導致返回的 View 與綁定事件的 View 不一致。
v = inflater.inflate(R.layout.cate1, null, false); // 第一次 inflate,綁定按鈕事件
// ...
View view = inflater.inflate(resId, null); // 第二次 inflate,覆蓋了 v
((ViewPager) collection).addView(view, 0);
return view; // 返回的是第二次 inflate 的 view,按鈕事件丟失
只 inflate 一次,綁定事件後直接返回該 View:
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = inflater.inflate(getLayoutResId(position), container, false);
if (position == 0) {
Button btn = view.findViewById(R.id.btnAdd);
btn.setOnClickListener(v -> Toast.makeText(container.getContext(), "click", Toast.LENGTH_LONG).show());
}
container.addView(view);
return view;
}
FragmentStatePagerAdapter 替換舊版 PagerAdapter,生命周期管理更完善。isViewFromObject 返回 view == object。修正 inflate 邏輯後,Button 點擊即可正常觸發,ViewPager 頁面交互更穩定。