ViewPagerの入れ子構造でFragmentが表示されない時の対処
ViewPagerを使ってフラグメントを表示するときに普通 FragmentPagerAdapter
を継承したカスタムのAdapterにFragmentManagerを引数として渡すと思いますが、ViewPagerが入れ子構造をしている場合、子のフラグメントのViewが表示されない問題が発生してしまいます。
この問題の対処として
CustomAdapter adapter = CustomAdapter(getActivity().getSupportFragmentManager())
を
CustomAdapter adapter = CustomAdapter(getChildFragmentManager())
のように書き換えてください。
getChildFragmentManager()
の中身がどのようになっているか見てみると
final public FragmentManager getChildFragmentManager() { if (mChildFragmentManager == null) { instantiateChildFragmentManager(); if (mState >= RESUMED) { mChildFragmentManager.dispatchResume(); } else if (mState >= STARTED) { mChildFragmentManager.dispatchStart(); } else if (mState >= ACTIVITY_CREATED) { mChildFragmentManager.dispatchActivityCreated(); } else if (mState >= CREATED) { mChildFragmentManager.dispatchCreate(); } } return mChildFragmentManager; }
とActivityのステイタスによってmChildFragmentManagerにライフサイクルに対応したメソッドを呼び出しています。
getActivity().getSupportFragmentManager()
を子のフラグメントで直接呼び出すとライフサイクルを無視し、バックグラウンドに存在するフラグメントが表示されないというバグが発生してしまったことがわかります。
Acer Liquid Z200 Android 4.4 / AndroidデュアルSIM&SIMロックフリー / 4inch ディスプレイ / RAM 512MB / ROM 4GB
- 出版社/メーカー: Acer
- メディア: Wireless Phone Accessory
- この商品を含むブログ (1件) を見る
ほんきで学ぶAndroidアプリ開発入門 第2版 Android Studio、Android SDK 7対応
- 作者: 株式会社Re:Kayo-System
- 出版社/メーカー: 翔泳社
- 発売日: 2016/11/19
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る