【发布时间】:2017-08-07 18:56:38
【问题描述】:
我想在我的应用中实现导航逻辑,就像在 Youtube 应用中一样。 (底部导航视图+片段管理)。我想要这个,因为这些片段很重,所以我希望它们被惰性初始化,然后存储在 backstack 中,我感觉 YouTube 就是这样做的。我已经实现了 BottomNagivationView,但我遇到了片段管理问题。
我的代码:
bottomNavigationView.setOnTabSelectedListener { position, _ ->
setFragment(OnlinePageFragment.Page.values()[position])
}
其中 Pages 是枚举
enum class Page(index: Int, val klass: Class<*>) {
ONE(0, OnePageFragment::class.java),
TWO(1, TwoPageFragment::class.java),
THREE(2, ThreePageFragment::class.java)
}
这是我的 setFragment 函数
fun setFragment(page: OnlinePageFragment.Page) {
var fragment: Fragment? = supportFragmentManager.findFragmentByTag(page.klass.name)
val tag = page.klass.name
if (fragment == null)
fragment = OnlinePageFragment.newInstance(page, null)
val ft = supportFragmentManager.beginTransaction()
with(ft) {
replace(R.id.fragmentContainer, fragment, tag)
addToBackStack(tag)
commit()
}
}
override fun onBackPressed() {
if (supportFragmentManager.backStackEntryCount == 1) finish()
else super.onBackPressed()
}
它运行良好,但不如 YouTube 应用。 YouTube 应用程序有一些神奇的行为,即每个片段只保留一个事务,而我的应用程序允许创建“无限”事务的后台堆栈。您知道它在 YouTube 应用中的工作原理吗?
【问题讨论】:
标签: android android-fragments fragment-backstack