在 Fragment 內部使用 `ViewPager` + `FragmentPagerAdapter` 時,若傳遞 `getFragmentManager()` (或 `getSupportFragmentManager()`),會導致:
**Fragment 管理器是分層的**:
`ViewPager` 的適配器需要一個 `FragmentManager` 來實例化、附加、分離頁面 Fragment。若給父級管理器,它會嘗試在 Activity 視圖層級操作子 Fragment,**找不到容器視圖**,導致失敗。
public class ParentFragment extends Fragment {
private ViewPager viewPager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_parent, container, false);
viewPager = view.findViewById(R.id.viewPager);
// 關鍵:使用 getChildFragmentManager()
viewPager.setAdapter(new MyPagerAdapter(getChildFragmentManager()));
return view;
}
private static class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(FragmentManager fm) {
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}
@NonNull @Override public Fragment getItem(int position) { return ChildFragment.newInstance(position); }
@Override public int getCount() { return 3; }
}
}
**凡是 Fragment 裡套 ViewPager (或 Fragment 容器),適配器構造器必須傳 `getChildFragmentManager()`**。這是 Fragment 嵌套機制的強制要求,否則子 Fragment 無法正確附加到父 Fragment 的視圖層級中。