下部のナビゲーションタブで、その中のフラグメントを変更しているアクティビティがあります。これらのタブで前後にクリックすると、ある時点で機能しなくなります。私はそれにいくつかのログを入れてコードが正常に実行されます。しかし、断片は切り換えられていない。FragmentTransaction hide/showが動作しない場合があります
コードはkotlinであるが、それはかなりまっすぐ進む
fun showTabFragment(tag: String) {
val currentFragment: Fragment? = supportFragmentManager.fragments?.lastOrNull()
var fragment = supportFragmentManager.findFragmentByTag(tag)
val fragmentExists = fragment != null
if (fragment == null) {
when (tag) {
TAG_LOGBOOK -> fragment = LogbookFragment()
TAG_RECIPES -> fragment = RecipesFragment()
TAG_PROFILE -> fragment = ProfileFragment()
else -> fragment = MeetingPlacesFragment()
}
}
val transaction = supportFragmentManager.beginTransaction()
if (currentFragment != null) {
Log.i("jacek", "hiding " + currentFragment.javaClass.simpleName)
transaction.hide(currentFragment)
}
if (fragmentExists) {
Log.i("jacek", "showing " + fragment.javaClass.simpleName)
transaction.show(fragment)
} else {
Log.i("jacek", "adding " + fragment.javaClass.simpleName)
transaction.add(R.id.container, fragment, tag)
}
transaction.commit()
}
フラグメントはかなり重いです。私はいくつかの軽量のもので試してみますが、それでも私の意見では問題ではありません。私が試すことができる他のものはありますか?私は、最新のサポートライブラリ使用してい
- ポイントは、それらを再作成することなく、クロスフェードアニメーションを追加することであるとしても25.2.0 私は断片を交換することに興味はないよ
たぶん、あなたは呼んで問題があります同じトランザクション内の同じフラグメントに対して 'hide()'と 'show()'を実行しますか? 'currentFragment'が' fragment'と同じフラグメントを参照するときのように、これは確かにここで起こります。これについて言えば、 'supportFragmentManager.fragments'リスト内の最後のフラグメントは最後に表示されたフラグメント(最近追加されたフラグメント)になると主張するのは間違っていると思います。すべての 'フラグメント 'を反復して、' isVisible() 'が真であるものを検索するか、最後に表示されたフラグメントタグを保存し、後でそれを見つけなければなりません。 –