Android / Kotlin - LAGGY从ViewPager检查BottomNavigationView中的项目

时间:2018-04-15 11:31:20

标签: android performance kotlin android-viewpager android-navigation-bar

我对编程很新,这是我的第一个大型/真实项目。

- 背景 -

我在MainActivity中设置了一个ViewPager,可以在3个不同的片段之间进行滑动。另外,一个片段需要工具栏中的菜单项,并且一个BottomNavigationView保存在MainActivity中。

每次我移动到ViewPager的新项目/页面时,我想选择(检查)BottomNavView中的相应页面项目。

我尝试过以下一种配置,但无法完美配置

- 问题 -

执行 bottom_navigation.menu.getItem(pos).isChecked = true 所需的时间太长了...我的HTC One大约需要50ms,或者仿真器需要100ms。 此延迟导致ViewPager滚动操作受到震动/延迟。

我想知道是否有不同的方式检查或突出显示BottomNavBar中的相应项目,或者更理想的是,同时执行检查操作而不会妨碍滚动动画ViewPager。

- 尝试修复 -

  • onPageSelected 中执行检查 - (结果略显滞后)
  • 滚动状态为 IDLE 时执行检查 - (结果是平滑的寻呼机滚动,但是选中的项目是&#39;留下&#39;并且更新得太晚,特别是在快速滚动时)< / LI>
  • 在Anko的 doAsync {} 中找到导航项 - (结果不要改变)

        // Adds a page-change listener
    viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
    
        // Set Toolbar title and menu items
        override fun onPageSelected(position: Int) {
            when (position) {
                0 -> {
                    supportActionBar!!.title = "Page1"
                    toolbar.menu.setGroupVisible(0, false)
                }
                1 -> {
                    supportActionBar!!.title = "Page2"
                    if (toolbar.menu.size() == 0) {
                        toolbar.inflateMenu(R.menu.toolbar_list_menu)
                    } else {
                        toolbar.menu.setGroupVisible(0, true)
                    }
                }
                2 -> {
                    supportActionBar!!.title = "Page3"
                    toolbar.menu.setGroupVisible(0, false)
                }
            }
        }
    
        // While view pager settling on new item/page, check the correct bottom navigation view item
        override fun onPageScrollStateChanged(state: Int) {
            if (state == ViewPager.SCROLL_STATE_SETTLING) {
                val pos = viewPager.currentItem
                bottom_navigation.menu.getItem(pos).isChecked = true
            }
        }
    
        // Not needed, must be implemented
        override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
    })
    

我真的希望有人能够帮助我提高应用效果:)

感谢您的时间。

0 个答案:

没有答案