Fix redundant fragments in DetailsActivity

This commit is contained in:
Koitharu
2022-03-19 16:34:48 +02:00
parent ff25162834
commit b646cc00a3
4 changed files with 23 additions and 6 deletions

View File

@@ -97,8 +97,8 @@ dependencies {
implementation 'com.squareup.okhttp3:okhttp:4.9.3' implementation 'com.squareup.okhttp3:okhttp:4.9.3'
implementation 'com.squareup.okio:okio:3.0.0' implementation 'com.squareup.okio:okio:3.0.0'
implementation 'com.hannesdorfmann:adapterdelegates4-kotlin-dsl:4.3.1' implementation 'com.hannesdorfmann:adapterdelegates4-kotlin-dsl:4.3.2'
implementation 'com.hannesdorfmann:adapterdelegates4-kotlin-dsl-viewbinding:4.3.1' implementation 'com.hannesdorfmann:adapterdelegates4-kotlin-dsl-viewbinding:4.3.2'
implementation 'io.insert-koin:koin-android:3.1.5' implementation 'io.insert-koin:koin-android:3.1.5'
implementation 'io.coil-kt:coil-base:1.4.0' implementation 'io.coil-kt:coil-base:1.4.0'

View File

@@ -93,6 +93,7 @@ class KotatsuApp : Application() {
.detectWrongFragmentContainer() .detectWrongFragmentContainer()
.detectRetainInstanceUsage() .detectRetainInstanceUsage()
.detectSetUserVisibleHint() .detectSetUserVisibleHint()
.detectFragmentTagUsage()
.build() .build()
} }
} }

View File

@@ -75,10 +75,7 @@ class ChaptersFragment : BaseFragment<FragmentChaptersBinding>(),
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
super.onCreateOptionsMenu(menu, inflater) super.onCreateOptionsMenu(menu, inflater)
// workaround: duplication after screen rotation inflater.inflate(R.menu.opt_chapters, menu)
if (menu.findItem(R.id.action_reversed) == null) {
inflater.inflate(R.menu.opt_chapters, menu)
}
} }
override fun onPrepareOptionsMenu(menu: Menu) { override fun onPrepareOptionsMenu(menu: Menu) {

View File

@@ -18,6 +18,7 @@ import androidx.core.net.toFile
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams import androidx.core.view.updateLayoutParams
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import androidx.fragment.app.commit
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout
@@ -63,6 +64,7 @@ class DetailsActivity : BaseActivity<ActivityDetailsBinding>(), TabLayoutMediato
pager.adapter = MangaDetailsAdapter(this) pager.adapter = MangaDetailsAdapter(this)
TabLayoutMediator(checkNotNull(binding.tabs), pager, this).attach() TabLayoutMediator(checkNotNull(binding.tabs), pager, this).attach()
} }
gcFragments()
binding.spinnerBranches?.let(::initSpinner) binding.spinnerBranches?.let(::initSpinner)
viewModel.manga.observe(this, ::onMangaUpdated) viewModel.manga.observe(this, ::onMangaUpdated)
@@ -293,6 +295,23 @@ class DetailsActivity : BaseActivity<ActivityDetailsBinding>(), TabLayoutMediato
} }
} }
private fun gcFragments() {
val mustHaveId = binding.pager == null
val fm = supportFragmentManager
val fragmentsToRemove = fm.fragments.filter { f ->
(f.id == 0) == mustHaveId
}
if (fragmentsToRemove.isEmpty()) {
return
}
fm.commit {
setReorderingAllowed(true)
for (f in fragmentsToRemove) {
remove(f)
}
}
}
companion object { companion object {
fun newIntent(context: Context, manga: Manga): Intent { fun newIntent(context: Context, manga: Manga): Intent {