`Activity` 通過 `ViewPager` 加載 3 個 `Fragment`(各自佈局含 `EditText`)。在 `Activity.onCreate` 中直接 `findViewById` 獲取 `EditText` 並 `addTextChangedListener` → **空指針**,因 Fragment 視圖尚未創建。在 Fragment 內部 `Button` 點擊後初始化則正常。
public class MyPagerAdapter extends FragmentPagerAdapter {
@Override
public Fragment getItem(int position) {
BaseFragment fragment = fragments[position];
// 關鍵:在 Fragment 實例化後、視圖創建前,預設監聽邏輯
fragment.setOnTextChangeListener(new TextWatcher() { ... });
return fragment;
}
}
Fragment 基類:
public abstract class BaseFragment extends Fragment {
private TextWatcher textWatcher;
public void setOnTextChangeListener(TextWatcher watcher) { this.textWatcher = watcher; }
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
EditText et = view.findViewById(R.id.et_input);
if (textWatcher != null) et.addTextChangedListener(textWatcher);
}
}