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.
我有列表项 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.