【发布时间】:2017-05-30 20:47:53
【问题描述】:
我有列表项 onlcick 我带到 DetailActivity 的列表项。 DetailActivity 可以使用 viewpager 和 Fragments 进行滑动。问题是当 DetailActivity 打开并加载 Fragment 时没有显示菜单选项但是如果我向左或向右滑动我会得到菜单选项 然后当我返回到初始片段时,菜单项是可见的。
我正在夸大片段中的菜单选项。
详细活动
@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();
}
}
细节片段
@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 与我的自定义工具栏一起使用时,它会产生问题。 这是我创建的具有相同问题的示例项目 链接到githubhttps://github.com/KumarVelu/viewPagerDemo
【问题讨论】:
-
newsItem 的值是多少?从 0 开始还是从 1 开始?
-
newsItem 是对象。 mNewsItemList.indexOf(newsItem);将返回newsItem在mNewsItemList中的位置,从0开始。
-
你在哪里调用 Fragment.setHasOptionsMenu(true) ?
-
在片段的onCreate中。
-
到目前为止您发布的代码看起来不错,错误可能在其他地方。您也可以尝试其他版本的支持库。
标签: android android-fragments android-viewpager android-menu