我想在我的应用导航逻辑中实现,如在Youtube应用中。 (BottomNavigationView +片段管理)。我想要这个,因为这些片段很重,所以我希望它们被初始化,然后存储在后台,我觉得YouTube是这样做的。我实施了BottomNagivationView,但我遇到了片段管理问题。如何复制YouTube的应用导航逻辑
我的代码:
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应用程序中工作?
ViewPager是我目前的实现,我想改变它,因为一次加载3个片段太重了。 –
@StachuBarański如果它太重,以至于在第一次加载时第一次加载3个片段时只有第一次加载,而其他加载数据(如果用户滑动以查看它们)。 – hardartcore