当滑动时,ViewPager菜单图标延迟

4
在我的应用程序中切换选项卡时,菜单图标出现明显的延迟。如果我点击选项卡而不是滑动,它们会立即更新。我为每个片段拥有不同的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);
}

enter image description here

注意,当点击选项卡时,图标会立即从溢出变为放大镜,但滑动时则明显延迟。我希望在新选项卡居中时立即更新图标。在Pocket Cast的“发现”菜单中,具有不同菜单图标的选项卡似乎甚至在滑动动画完成之前就加载了它们。
2个回答

7

在ViewPager的每个片段中使用不同的菜单不如:只需将菜单填充到布局中,然后在ViewPager的onPageChangeListener中调用invalidateOptionsMenu(),并在onCreateOptionsMenu中以编程方式显示所需的菜单图标,全部在主活动而不是片段中完成。搜索视图监听器仍然在片段中处理。

    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);
    }

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

0

以前使用ViewPager从未遇到过这个问题。但是新的ViewPager2会出现这种情况。这很令人沮丧,因为默认的滚动速度太慢了,而且没有办法改变它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接