【问题标题】:Action bar items from a ViewPager fragment showing up after a delayViewPager 片段中的操作栏项目在延迟后显示
【发布时间】:2013-05-27 18:54:25
【问题描述】:

我正在使用 ActionBarSherlock,我的主要活动有一个包含三个页面的 ViewPager,它们都是片段。其中一个片段有一个onCreateOptionsMenu 方法,并且主活动中的操作栏已正确更新......有点。方法如下:

public void onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu, com.actionbarsherlock.view.MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.search, menu);
    // A couple of other things
}

我正在使用自定义FragmentPagerAdapter

public class SectionsPagerAdapter extends FragmentPagerAdapter {
    FragmentManager fm;

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
        this.fm = fm;
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
        case 0:
            accountFragment = Account.newInstance();
            return accountFragment;
        case 1:
            filesFragment = Files.newInstance();
            return filesFragment;
        case 2:
            transfersFragment = Transfers.newInstance();
            return transfersFragment;
        }
        return null;
    }

    private String makeFragmentName(int viewId, int index) {
        return "android:switcher:" + viewId + ":" + index;
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
        case 0:
            return titleAccount;
        case 1:
            return titleFiles;
        case 2:
            return titleTransfers;
        }
        return null;
    }
}

我的活动中根本没有调用supportInvalidateOptionsMenu 的代码,所以我假设框架正在为我检查片段的选项菜单,但我不喜欢它的工作方式。这就是我的意思:

Stock 应用(电话、人脉等)以及其他一些应用可以正确执行此操作。也就是说,只要我跳转到一个页面,就会显示该新页面的菜单项。但在我的,它们只在滑动动画结束时显示。

这是我尝试过的:

pager.setOnPageChangeListener(new OnPageChangeListener() {
        @Override
        public void onPageSelected(int arg0) {
            supportInvalidateOptionsMenu();
        }
        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {}
        @Override
        public void onPageScrollStateChanged(int arg0) {}
    });

这似乎没有任何作用。

日志显示当我滑动到另一个页面时,onPageSelected 被正确调用,这是我想要更新项目的时候。登录我的片段的onCreateOptionsMenu 显示它仅在动画结束时调用,这与调用onPageSelected 时有相当大的延迟。

我该如何解决这个问题?

【问题讨论】:

    标签: android android-fragments android-actionbar


    【解决方案1】:

    股票应用(电话、人脉等)以及其他一些应用都能正确执行此操作。也就是说,只要我跳转到一个页面,就会显示该新页面的菜单项。但在我的,它们只在滑动动画结束时显示。

    我无法在运行 4.2.2 的 Galaxy Nexus 上使用 Phone 重现您的行为。在那里,在新页面完全可见之前,操作栏不会改变,无论是滑动还是滑动。

    使用通讯录,我看到了您所看到的,因为当手指抬起时操作栏会发生变化,所以一晃,变化会更快。

    坦率地说,我认为你是在从鼹鼠山上造山。话虽如此,我能看到复制联系人行为的唯一方法是完全重新实现FragmentPagerAdapter,从setPrimaryItem() 中删除setMenuVisibility() 调用,然后安排在您认为更合适的时间进行这些调用。

    【讨论】:

    • 你是对的电话,我的错!我想困扰我的是我见过很多没有这个问题的第三方应用程序(我想不出任何)。我觉得我在某个地方错过了一个愚蠢的小电话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多