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

byqmnocz  于 2022-11-14  发布在  Android
关注(0)|答案(2)|浏览(123)

在我的应用程序的标签页之间滑动时,菜单图标在出现之前会有一个明显的延迟。如果我点击标签页,而不是滑动,它们会立即更新。我为每个片段准备了不同的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的“发现”菜单上,具有不同菜单图标的标签页似乎在滑动动画完成之前就已经加载了。

hmtdttj4

hmtdttj41#

不是在视图分页器的每个片段中使用不同的菜单--膨胀菜单,在ViewPager的onPageChangeListener中调用invalidateOptionsMenu(),并以编程方式在onCreateOptionsMenu中显示所需的菜单图标,所有这些都在主Activity中而不是在片段中进行。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);
    }

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

rqenqsqc

rqenqsqc2#

ViewPager从来没有遇到过这个问题。但是新的ViewPager2的行为是这样的。而且这很令人沮丧,因为没有办法改变滚动速度,因为默认的速度太慢了。

相关问题