gpt4 book ai didi

android - Viewpager 不显示第一个 fragment 的菜单项

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:44:45 26 4
gpt4 key购买 nike

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

我正在 fragment 中膨胀菜单选项。

详细 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);
}

适配器类

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

细节 fragment

@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 一起使用我的自定义工具栏时它会产生问题。 这是我创建的示例项目,它有同样的问题链接到 github https://github.com/KumarVelu/viewPagerDemo

最佳答案

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

如果你想使用一个工具栏作为主要的操作栏,在 Activity 布局中移动工具栏而不是 fragment 布局,并在 Activity 中初始化一次。

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

关于android - Viewpager 不显示第一个 fragment 的菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44203201/

26 4 0