我有一個FragmentStatePageAdapter(我用作ViewPager的適配器)和操作欄中的菜單項的問題。FragmentStatePageAdapter重複ActionBar菜單項
當我啓動應用程序時,一切都很好。如果我將任務移動到背景(例如,按HOME按鈕),我開始做些事情直到活動結束,然後當我回到我的應用程序(通過啓動器或創建的通知)時,一切都很好,除了有複製操作欄中的菜單項。
重要的細節是唯一重複的項目是在ViewPager中使用的每個片段的onCreateOptionsMenu()中創建的項目。
如果我用FragmentPageAdapter替換FragmentStatePageAdapter,項目不會重複,但片段不會在ViewPager中顯示(getItem()函數從適配器永遠不會調用,因此它不會返回任何片段)。
任何想法?一種避免FragmentStatePageAdapter重複菜單項的方法?也許使用FragmentPageAdapter,但修改後顯示片段?我的片段中的修改?
下面是我的一些應用程序的代碼片段...
如何片段內創建菜單項:
@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適配器
被實例化@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;
}
謝謝!我嘗試將activity的launchMode更改爲「singleTop」,並且我還嘗試在getItem()中返回之前創建的片段(但這沒用,因爲getItem()在返回到應用程序時從不會調用,如我之前所說)。
你好,米格爾!你找到解決方案嗎? – HighFlyer
是的。我剛剛發佈了我使用的解決方案。這不是一個真正的解決方法,而是一種解決方法。 –