首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

ViewPager 中正確實現 Button 點擊事件:避免 inflate 重複導致的失效

     編輯:程式設計綜合問答

在 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,生命周期管理更完善。
  • 按鈕點擊邏輯放入 Fragment 或 ViewHolder 中,避免 Adapter 代碼膨脹。
  • 確保 isViewFromObject 返回 view == object。

修正 inflate 邏輯後,Button 點擊即可正常觸發,ViewPager 頁面交互更穩定。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved