Skip to content

Instantly share code, notes, and snippets.

@ntngel1
Created April 15, 2019 08:29
Show Gist options
  • Save ntngel1/c706bd3219a22ae65cdddf7442a3f1ad to your computer and use it in GitHub Desktop.
Save ntngel1/c706bd3219a22ae65cdddf7442a3f1ad to your computer and use it in GitHub Desktop.
interface FragmentTransactionHandler {
// withBackstack - логично, закинуть в стэк фрагментов, immediately - ждать пока фрагмент полностью не откроется
fun openFragment(fragment: Fragment, withBackstack: Boolean = false, immediately: Boolean = false)
}
interface MainView : MvpView, FragmentTransactionHandler {
@StateStrategyType(OneExecutionStateStrategy::class)
override fun openFragment(fragment: Fragment, withBackstack: Boolean = false, immediately: Boolean = false)
}
class MainActivity: MainView, MvpAppCompatActivity {
fun openFragment(fragment: Fragment, withBackstack: Boolean = false, immediately: Boolean = false) {
if (withBackstack == false) {
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container, fragment)
.commit()
} else {
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container, fragment)
.addToBackStack(null)
.commit()
}
if (immediately) {
supportFragmentManager.executePendingTransactions()
}
}
}
// Дальше мы просто передаем в роутер наш viewState прямо из презентера, и так как viewState реализует интерфейс
// FragmentTransactionHandler, мы может вызывать в роутере данный метод и он точно будет отрабатывать
// Минус в том что в данном случае мы должны хранить роутер конкретно в презентере, а если он там храниться не должен,
// то получается странно
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment