2

我对编程相当陌生,这是我的第一个大型/真实项目。

- 背景 -

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

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

我尝试了以下一种的多种配置,但无法做到完美

- 问题 -

执行bottom_navigation.menu.getItem(pos).isChecked = true的时间太长了……在我的H​​TC One 上大约需要50 毫秒,在模拟器中大约需要100 毫秒。此延迟会导致 ViewPager 滚动操作受到震动/延迟。

我想知道是否有不同的方法来检查或突出显示底部导航栏中的相应项目,或者更可取的是,在不妨碍 ViewPager 滚动动画的情况下同时执行检查操作。

--尝试修复--

  • 在onPageSelected中执行检查- (结果稍微滞后)
  • 当滚动状态为空闲时执行检查- (导致平滑的寻呼机滚动,但检查的项目是“落后”并且更新太晚,特别是在快速滚动时)
  • 在 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) {}
    })
    

我真的希望有人能帮助我提高应用程序的性能:)

谢谢你的时间。

4

0 回答 0