BottomNavigationView滞后于片段事务

问题描述 投票:3回答:1

The problem

我在我的一个活动中使用Android设计支持库中的BottomNavigationView,以及每个导航项的Fragments。

每次我在栏上选择一个项目时,我都会进行片段交易,就像下面的片段一样(为简洁起见,代码的某些部分被删除):

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解决它,并仅在抽屉关闭后进行实际的片段交易。

What I've tried so far

我试图“缓存”片段,保留它们的引用以避免每次都重新创建对象(例如MyFragment.newInstance()),但这不起作用。

我也尝试使用处理程序,这有点解决了问题,但它可能会导致我异常in some cases。类似下面的代码段:

handler.postDelayed({changeFragment(fragmentToSet!!)}, 200)

有没有办法在不使用处理程序(或其他异步调用)的情况下使用导航菜单以类似于this solution的方式解决此问题?

android android-fragments kotlin material-design bottomnavigationview
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.