我列出了列表项的列表项,我将其带到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
答案 0 :(得分:11)
问题是您正在尝试设置多个主ActionBar,因为每个片段都有自己的工具栏。因此,当ViewPager加载当前页面并预加载下一页时,您有2个片段试图将自己的工具栏设置为主ActionBar并且它们是冲突的。
如果要将工具栏用作主操作栏,请在“活动”布局中移动工具栏而不是片段布局,并在“活动”中将其初始化一次。
如果您想在每个片段中使用单独的工具栏,请不要将任何工具栏设置为主操作栏,而是使用Toolbar.inflateMenu()
和Toolbar.setOnMenuItemClickListener()
。然后,每个片段将直接在其自己的工具栏中膨胀自己的菜单项,而不涉及活动。
答案 1 :(得分:0)
void method(){ 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);
} 之前 打电话给你的片段。 见到你