android - 滑动时 ViewPager 菜单图标延迟

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

在我的应用程序的选项卡之间滑动时,菜单图标在出现之前有明显的延迟。如果我单击选项卡而不是滑动,它们会立即更新。我为每个 fragment 设置了不同的 menu.xml 文件,并在每个 fragment 的 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 的“发现”菜单上,带有不同菜单图标的选项卡似乎甚至在滑动动画完成之前就加载了它们。

最佳答案

不是在 View 寻呼机的每个 fragment 中使用不同的菜单 - 膨胀菜单,在 ViewPager 的 onPageChangeListener 中调用 invalidateOptionsMenu(),并以编程方式显示所需的菜单图标在 onCreateOptionsMenu 中,所有内容都在主要 Activity 中而不是 fragment 中。 searchView 监听器仍在 fragment 中处理。

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

现在没有延迟,菜单图标会在滑动动画结束前更新。

关于android - 滑动时 ViewPager 菜单图标延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36248745/

相关文章:

java - 当设置为 Android 4.0 时,Eclipse 无法识别 numberPassword?

java - Google Maps API v2 上的随机 NullPointerException

android - 在传统的 android ViewPager 中滚动 LazyRow 的问题

android - 如何在 fragment 中使用 ViewPager

在 ICS 中使用 ViewPager 更改 Android 背景颜色

java - 需要 Android 堆按摩

android - 如何从 ListView 中跳过一个 View ?

android - 任务 ':app:packageDebug' 执行失败。无法创建目录

android - 如果我在 Activity 和 fragment 中使用静态字段,在内存使用方面是否不好?

android - 对话 fragment 嵌入取决于设备