刷卡时ViewPager菜单图标延迟

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

在我的应用程序中的选项卡之间滑动时,菜单图标在出现之前会有明显的延迟。如果我单击选项卡而不是滑动,它们会立即更新。我为每个片段都有不同的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的Discover菜单中,即使在滑动动画完成之前,带有不同菜单图标的选项卡似乎也会加载它们。

android android-fragments android-viewpager android-menu
1个回答
7
投票

不是在视图分页器的每个片段内使用不同的菜单 - 给菜单充气,在ViewPager的invalidateOptionsMenu()中调用onPageChangeListener,并以编程方式在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);
    }

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

© www.soinside.com 2019 - 2024. All rights reserved.