1

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 を調べれば調べるほど、この動作はそのライブラリを使用してのみ利用できるようです。FragmentPagerAdapterAndroid のどのバージョンの「ネイティブ」アクション バー/動作の一部でもないようです。誰でも私のためにこれを確認できますか?

4

1 に答える 1