【问题标题】:ViewPager menu icon delay when swiping滑动时 ViewPager 菜单图标延迟
【发布时间】:2022-04-22 22:19:25
【问题描述】:

在我的应用程序的选项卡之间滑动时,菜单图标在出现之前会有明显的延迟。如果我单击标签而不是滑动,它们会立即更新。我对每个片段都有不同的 menu.xml 文件,并在每个片段的 onCreateOptionsMenu 中对它们进行膨胀。

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.fodmap_menu, menu);

    final MenuItem item = menu.findItem(R.id.action_search);
    final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
    searchView.setOnQueryTextListener(this);
}

请注意,当单击选项卡时,图标会立即从溢出变为放大镜,但在滑动时明显延迟。我希望新标签居中后立即更新图标。在 Pocket Cast 的 Discover 菜单上,带有不同菜单图标的选项卡似乎在滑动动画完成之前就已经加载了它们。

【问题讨论】:

    标签: android android-fragments android-viewpager android-menu


    【解决方案1】:

    而不是在视图分页器的每个片段中使用不同的菜单 - 膨胀菜单,在 ViewPager 的 onPageChangeListener 内调用 invalidateOptionsMenu(),并以编程方式在 onCreateOptionsMenu 中显示所需的菜单图标,所有这些都在主活动中而不是碎片。 searchView 监听器仍然在片段中处理。

        mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                invalidateOptionsMenu();
            }
    
            @Override
            public void onPageSelected(int position) {}
            @Override
            public void onPageScrollStateChanged(int state) {}
        });
    
    
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.fodmap_menu, menu);
            if (mViewPager.getCurrentItem()==0){
                menu.findItem(R.id.action_search).setVisible(false);
            } else if(mViewPager.getCurrentItem()==1){
                menu.findItem(R.id.action_search).setVisible(true);
            } else if(mViewPager.getCurrentItem()==2) {
                menu.findItem(R.id.action_search).setVisible(false);
            }
            return super.onCreateOptionsMenu(menu);
        }
    

    现在没有延迟,菜单图标会在滑动动画完成之前更新。

    【讨论】:

      【解决方案2】:

      ViewPager 从来没有遇到过这个问题。但是新的 ViewPager2 以这种方式运行。这很令人沮丧,因为默认太慢了,无法更改滚动速度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多