diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/local/ui/LocalListFragment.kt b/app/src/main/kotlin/org/koitharu/kotatsu/local/ui/LocalListFragment.kt index d3f27893f..c42827040 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/local/ui/LocalListFragment.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/local/ui/LocalListFragment.kt @@ -26,6 +26,15 @@ import org.koitharu.kotatsu.remotelist.ui.RemoteListFragment class LocalListFragment : MangaListFragment(), FilterOwner { + init { + withArgs(1) { + putSerializable( + RemoteListFragment.ARG_SOURCE, + MangaSource.LOCAL, + ) // required by FilterCoordinator + } + } + override val viewModel by viewModels() override val filter: MangaFilter @@ -97,14 +106,4 @@ class LocalListFragment : MangaListFragment(), FilterOwner { Snackbar.LENGTH_SHORT, ).show() } - - companion object { - - fun newInstance() = LocalListFragment().withArgs(1) { - putSerializable( - RemoteListFragment.ARG_SOURCE, - MangaSource.LOCAL, - ) // required by FilterCoordinator - } - } } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/MainNavigationDelegate.kt b/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/MainNavigationDelegate.kt index ea1e11959..b04aecc06 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/MainNavigationDelegate.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/MainNavigationDelegate.kt @@ -134,13 +134,13 @@ class MainNavigationDelegate( private fun onNavigationItemSelected(@IdRes itemId: Int): Boolean { return setPrimaryFragment( when (itemId) { - R.id.nav_history -> HistoryListFragment() - R.id.nav_favorites -> FavouritesContainerFragment() - R.id.nav_explore -> ExploreFragment() - R.id.nav_feed -> FeedFragment() - R.id.nav_local -> LocalListFragment.newInstance() - R.id.nav_suggestions -> SuggestionsFragment() - R.id.nav_bookmarks -> BookmarksFragment() + R.id.nav_history -> HistoryListFragment::class.java + R.id.nav_favorites -> FavouritesContainerFragment::class.java + R.id.nav_explore -> ExploreFragment::class.java + R.id.nav_feed -> FeedFragment::class.java + R.id.nav_local -> LocalListFragment::class.java + R.id.nav_suggestions -> SuggestionsFragment::class.java + R.id.nav_bookmarks -> BookmarksFragment::class.java else -> return false }, ) @@ -157,16 +157,17 @@ class MainNavigationDelegate( else -> 0 } - private fun setPrimaryFragment(fragment: Fragment): Boolean { - if (fragmentManager.isStateSaved) { + private fun setPrimaryFragment(fragmentClass: Class): Boolean { + if (fragmentManager.isStateSaved || fragmentClass.isInstance(primaryFragment)) { return false } + val fragment = instantiateFragment(fragmentClass) fragment.enterTransition = MaterialFadeThrough() fragmentManager.beginTransaction() .setReorderingAllowed(true) - .replace(R.id.container, fragment, TAG_PRIMARY) + .replace(R.id.container, fragmentClass, null, TAG_PRIMARY) + .runOnCommit { onFragmentChanged(fragment, fromUser = true) } .commit() - onFragmentChanged(fragment, fromUser = true) return true } @@ -182,6 +183,11 @@ class MainNavigationDelegate( } } + private fun instantiateFragment(fragmentClass: Class): Fragment { + val classLoader = navBar.context.classLoader + return fragmentManager.fragmentFactory.instantiate(classLoader, fragmentClass.name) + } + private fun observeSettings(lifecycleOwner: LifecycleOwner) { settings.observe() .filter { x -> x == AppSettings.KEY_TRACKER_ENABLED || x == AppSettings.KEY_SUGGESTIONS } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/search/ui/MangaListActivity.kt b/app/src/main/kotlin/org/koitharu/kotatsu/search/ui/MangaListActivity.kt index 6a18aa976..b7505ec2f 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/search/ui/MangaListActivity.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/search/ui/MangaListActivity.kt @@ -118,7 +118,7 @@ class MangaListActivity : fm.commit { setReorderingAllowed(true) val fragment = if (source == MangaSource.LOCAL) { - LocalListFragment.newInstance() + LocalListFragment() } else { RemoteListFragment.newInstance(source) }