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

Android ViewPager 中 Button 點擊無效:正確綁定動態視圖事件

     編輯:程式設計綜合問答

問題現象

ViewPager 頁面包含 Button,在 Activity 中直接 findViewById 獲取 Button 並設置 OnClickListener 導致 ClassCastException 或點擊無響應。

原因

ViewPager 的頁面視圖由 PagerAdapter 動態創建(instantiateItem),不在 Activity 的 setContentView 佈局中,Activity.findViewById 找不到該 Button。

解決方案:在 Adapter 中綁定事件

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;
    }
    // ... 其他必要方法
}

或使用接口回調 Activity

public interface OnPageButtonClickListener {
    void onButtonClick(int position);
}

// Adapter 構造傳入 listener,點擊時調用 listener.onButtonClick(position)

總結

動態視圖的事件綁定必須在視圖創建處(Adapter、Fragment、Dialog 等)進行,不要在外層 Activity 中硬找 ID。

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