【发布时间】:2019-02-09 19:51:54
【问题描述】:
问题
我在我的一个活动中使用来自 Android 设计支持库的 BottomNavigationView,以及每个导航项的片段。
每次我在栏上选择一个项目时,我都会进行一次片段事务,如下面的 sn-p (为简洁起见,删除了部分代码):
private var fragmentToSet: Fragment? = null
private val onNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
fragmentToSet = when (item.itemId) {
// Choose fragment based on selection
// ...
}
// ...
supportFragmentManager.beginTransaction()
.replace(R.id.container, fragmentToSet)
.commit()
}
问题是...底栏动画变得超级滞后,只有在片段完全加载并显示在屏幕上后才能完成。
这个问题is not exactly new,因为它也可能在使用导航菜单时发生,但至少可以通过使用DrawerLayout.DrawerListener 解决它,并且只有在抽屉关闭后才执行实际的片段事务。
到目前为止我已经尝试过什么
我尝试“缓存”片段,保留它们的引用以避免每次都重新创建对象(例如MyFragment.newInstance()),但这不起作用。
我也尝试使用处理程序,这有点解决了问题,但它可能会导致我出现异常in some cases。类似于下面的 sn-p:
handler.postDelayed({changeFragment(fragmentToSet!!)}, 200)
有没有办法在不使用处理程序(或其他异步调用)的情况下解决此问题,类似于使用导航菜单时this solution 的方式?
【问题讨论】:
标签: android android-fragments kotlin material-design bottomnavigationview