5 つのフラグメントを使用するアクティビティがあります。FragmentPageAdapter
スワイプを実現するために、サポート ライブラリの を使用しています。
Fragment4 では、アクション バーに追加のメニュー項目を追加する必要があります。ユーザーがタブを選択してスワイプしない場合にのみ、これを正常に機能させることができます。ユーザーがタブにスワイプすると、追加のメニュー項目が常に表示されるわけではありません。
基本的に、Fragment3 にスワイプするとメニュー項目が表示され (Fragment4 の onCreateView が呼び出されてメモリに保存されるため)、Fragment4 (メニュー項目を持つことを意図したもの) にスワイプするとそのままになり、スワイプすると再び消えますFragment5 (これを行う必要があります)。ただし、Fragment2 までスワイプしてから先に進まない限り、消えたままです。唯一の例外は、少なくとも 2 フラグメント離れてタブを選択すると、Fragment4 のメニュー項目が正しく表示されることです。
また、実行中のその時点で onCreate を呼び出しているために Fragment3 のメニュー項目が表示されている場合、Fragment5 にスワイプするとメニュー項目が消えるのはなぜですか? スムーズなスワイプ機能を有効にするために、FragmentPageAdapter には一度に 3 つのフラグメントが「ロード」されると理解しています。
以下のコードを参照してください。
public View onCreateView(){
..
setHasOptionsMenu(true);
..
return view;
}
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
SubMenu sub = menu.addSubMenu("Options");
sub.add(0, EMAIL, 0, "Email");
sub.add(0, FILTER, 0, "Filter");
sub.add(0, SAVE, 0, "Save");
sub.getItem().setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
setMenuVisibility(true);
}
メニューに追加setMenuVisibility(true)
するとonActivityCreated
、前のフラグメントが表示されたときに表示されます。これは技術的にMyFragment.onActivityCreated
呼び出されたときであるため、正しいタブと前のタブのメニューが表示されます。ただし、[MyFragment] タブをスワイプするとメニューが消え、[MyFragment] タブまたはその他のタブをスワイプしても再表示されません。onCreateOptionsMenu
状態に関するドキュメント
"これは、オプション メニューが最初に表示されたときに 1 回だけ呼び出されます。表示されるたびにメニューを更新するには、onPrepareOptionsMenu(Menu) を参照してください。" >
なので追加してみました
public void onPrepareOptionsMenu(Menu menu){
setMenuVisibility(true);
}
しかし、それはまったく効果がありません。私は明らかにここに何かが欠けています...これはうまくいくはずです
編集:わかりました。ActionBarSherlock を調べれば調べるほど、この動作はそのライブラリを使用してのみ利用できるようです。FragmentPagerAdapter
Android のどのバージョンの「ネイティブ」アクション バー/動作の一部でもないようです。誰でも私のためにこれを確認できますか?