Viewpager 不显示第一个片段的菜单项

Viewpager not displaying menu items for first fragment

我有列表项 onlcick 我带到详细信息的列表项Activity。 DetailActivity 可使用 viewpager 和 Fragments 滑动。问题是当 DetailActivity 打开并加载 Fragment 时,没有显示菜单选项,但是如果我向左或向右滑动,我会得到菜单选项 然后当我 return 到初始片段时,菜单项可见。

我正在膨胀片段中的菜单选项。

详情Activity

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_article_new);

        mViewPager = (CustomViewPager) findViewById(R.id.viewPager);

        int currentItemIndex = mNewsItemList.indexOf(newsItem);

        mArticleSwipeMap = new HashMap<>();
        mPagerAdapter = new ArticlePagerAdapter(getSupportFragmentManager());
        mPagerAdapter.swapList(mNewsItemList);
        mViewPager.setOnSwipeOutListener(this);
        mViewPager.setAdapter(mPagerAdapter);
        mViewPager.setCurrentItem(currentItemIndex);
        mViewPager.addOnPageChangeListener(this);
    }

适配器class

private class ArticlePagerAdapter extends FragmentStatePagerAdapter{
        private Map<Integer, ArticleFragment> mPageReferenceMap = new HashMap<>();
        private List<NewsItem> newsItemList;

        public ArticlePagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            ArticleFragment articleFragment = ArticleFragment.newInstance(newsItemList.get(position));
            mPageReferenceMap.put(position, articleFragment);
            return articleFragment;
        }

        @Override
        public int getCount() {
            return newsItemList.size();
        }

        public void swapList(List<NewsItem> newsItemList){
            this.newsItemList = newsItemList;
            notifyDataSetChanged();
        }
    }

细节片段

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.toolbar_menu, menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int itemId = item.getItemId();
        switch(itemId) {
            case R.id.action_more:
                View menuItemView = mRootView.findViewById(R.id.action_more);
                onMenuClick(menuItemView);
                break;
            case R.id.action_share:
                shareTextUrl();
                break;
        }
        return true;
    }

更新 1:当我向左滑动时,当我向右滑动时显示菜单项时不显示菜单项,现在如果我向左滑动菜单项时显示。

它与设置 viewpager 有关系吗 这就是我在 Activity

的 onCrete 中设置 viewpager 的方式
mPagerAdapter = new ArticlePagerAdapter(getSupportFragmentManager());
        mPagerAdapter.swapList(mNewsItemList);
        mViewPager.setOnSwipeOutListener(this);
        mViewPager.setAdapter(mPagerAdapter);
        mViewPager.setCurrentItem(currentItemIndex);
        mViewPager.addOnPageChangeListener(this);

更新 2:

问题是当我使用自定义工具栏时它不起作用。当我与 DarkActionBar 一起使用时它工作正常但是当我与 NoActionBar 一起使用我的自定义工具栏时它会产生问题。 这是我创建的示例项目,它有同样的问题 link 到 github https://github.com/KumarVelu/viewPagerDemo

无效方法(){ int currentItemIndex = mNewsItemList.indexOf(newsItem);

    mArticleSwipeMap = new HashMap<>();
    mPagerAdapter = new ArticlePagerAdapter(getSupportFragmentManager());
    mPagerAdapter.swapList(mNewsItemList);
    mViewPager.setOnSwipeOutListener(this);
    mViewPager.setAdapter(mPagerAdapter);
    mViewPager.setCurrentItem(currentItemIndex);
    mViewPager.addOnPageChangeListener(this);

} 前 调用 onresume 你的片段。 再见

问题是您试图设置多个主 ActionBar,因为每个片段都有自己的工具栏。因此,当 ViewPager 加载当前页面并预加载下一页时,您有 2 个片段试图将它们自己的 Toolbar 设置为主 ActionBar 并且它们发生冲突。

如果要将工具栏用作主要操作栏,请在 Activity 布局中移动工具栏而不是片段布局,并在 Activity.

中对其进行一次初始化

如果您想在每个片段中使用单独的工具栏,请不要将任何工具栏设置为主操作栏,而是使用 Toolbar.inflateMenu()Toolbar.setOnMenuItemClickListener()。然后每个片段将直接在自己的工具栏中扩充自己的菜单项,而不涉及 Activity.