其他分享
首页 > 其他分享> > android – Viewpager不显示第一个片段的菜单项

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

作者:互联网

我有列表项的onlcick我带到DetailActivity的列表项.
DetailActivity可使用viewpager和Fragments进行转换.问题是当DetailActivity打开并加载Fragment时没有显示菜单选项但是如果我向左或向右滑动我会得到菜单选项
然后,当我返回到初始片段时,菜单项是可见的.

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

DetailActivity

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

适配器类

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

DetailFragment

@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做任何事情
这就是我在onCrete of Activity中设置viewpager的方法

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

更新2:

问题是当我使用自定义工具栏时,它无法正常工作.当我使用DarkActionBar时它工作正常,但当我使用NoActionBar和我的自定义工具栏时,它会创建prob.
 这是我创建的具有相同问题的示例项目
链接到github https://github.com/KumarVelu/viewPagerDemo

解决方法:

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

如果要将工具栏用作主操作栏,请在“活动”布局中移动工具栏而不是片段布局,并在“活动”中将其初始化一次.

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

标签:android,android-fragments,android-viewpager,android-menu
来源: https://codeday.me/bug/20190716/1474474.html