gpt4 book ai didi

android - FragmentStatePagerAdapter 重复 ActionBar 菜单项

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:35:11 25 4
gpt4 key购买 nike

我对 FragmentStatePageAdapter(我用作 ViewPager 的适配器)和操作栏中的菜单项有问题。

当我启动应用程序时,一切正常。如果我将任务移至后台(例如,按 HOME 按钮)并且我开始做一些事情直到 Activity 结束,那么当我返回我的应用程序时(通过启动器或我创建的通知)一切都很好,除了有操作栏中的重复菜单项。

一个重要的细节是,唯一重复的项目是在我在 ViewPager 中使用的每个 fragment 的 onCreateOptionsMenu() 中创建的项目。

如果我将 FragmentStatePageAdapter 替换为 FragmentPageAdapter,则项目不再重复,但 fragment 不会显示在 ViewPager 中(永远不会调用适配器的 getItem() 函数,因此它不会返回任何 fragment )。

有什么想法吗?一种避免 FragmentStatePageAdapter 重复菜单项的方法?也许使用 FragmentPageAdapter 但进行修改以显示 fragment ?对我的 fragment 进行了修改?

这是我的应用程序中的一些代码 fragment ...

如何在 fragment 中创建菜单项:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
/* Create play button */
final MenuItem mPlay = menu.add(R.string.play_all);

mPlay.setIcon(R.drawable.ic_play_all);
mPlay.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

mPlay.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
final List<Song> songs = getSongs();

if (songs.size() == 0) {
/* Show message */
Toast.makeText(mContext, R.string.no_song_list, Toast.LENGTH_LONG).show();
} else {
/* Play song list */
try { PlayManager.getService().playList(songs); } catch (Exception e) {}
}

return false;
}
});

/* Create menu */
super.onCreateOptionsMenu(menu, inflater);
}

如何在 ViewPager 适配器中实例化 fragment

@Override
public Fragment getItem(int position) {
final Class<?> cls = mTabs.get(position);

/* No tab */
if (cls == null)
return null;

/* Instantiate fragment */
final Fragment fragment = Fragment.instantiate(mContext, cls.getName(), null);

/* Add to list */
mFragments.put(position, fragment);

/* Return fragment */
return fragment;
}

谢谢!

PS:我试图将 Activity 的启动模式更改为“singleTop”,并且我还尝试在 getItem() 中返回之前创建的 fragment (但这没有用,因为当我返回到应用程序时从未调用 getItem(),正如我之前所说的)。

最佳答案

我在发布问题几天后找到了问题的解决方案。很抱歉这么晚才放在这里。

以下代码解决了我的问题:

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);

outState.remove("android:support:fragments");
}

就像在我实例化和使用 fragment 的 Activity 中编写那段代码一样简单。

希望对您有所帮助:)

关于android - FragmentStatePagerAdapter 重复 ActionBar 菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10485028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com