BottomNavigationによるタブの切り替えで、タブを切り替えても各フラグメントの内容が維持されたままにしたいと考えています。
しかしタブ切り替え時に以下のメソッドを呼び出すようにしたのですが、Fragment表示部分が真っ白になり意図した動作になりません。
hide部分を削除するとaddされていきフラグメントが重なって表示されていくことは確認済みです。
addされたフラグメント全てhide
↓
フラグメントマネージャーからadd済みの表示したいフラグメント取得
↓
無ければadd
↓
表示したいフラグメントをshow
という考え方がおかしいのでしょうか?
Kotlin
1 private fun addFragment(menuItemId: Int) { 2 val transaction = supportFragmentManager.beginTransaction() 3 val fragments = supportFragmentManager.fragments 4 // addされているフラグメントを全て隠す 5 for (fra in fragments) { 6 transaction.hide(fra) 7 } 8 // FragmentManagerから表示したいadd済みフラグメント取得 9 var fragment = getFragmentFromMng(getTag(menuItemId)) 10 11 // 未addだったら表示したいフラグメントをadd 12 if( fragment == null){ 13 // フラグメントのインスタンスを取得 14 fragment = createFragment(menuItemId) ?: return 15 transaction.add( 16 R.id.main_fragment, 17 fragment, 18 getTag(menuItemId) 19 ) 20 } 21 // 表示したいフラグメントをshow 22 transaction.show(fragment) 23 transaction.addToBackStack(null) 24 transaction.commit() 25 } 26 27 private fun getFragmentFromMng(tag: String): Fragment? { 28 val fragments = supportFragmentManager.fragments 29 30 for (fragment in fragments) { 31 if (fragment.tag.equals(tag)) { 32 return fragment 33 } 34 } 35 return null 36 }
回答1件
あなたの回答
tips
プレビュー