いくつかのフラグメントを示すアクティビティがあります。アクティビティビューには、カスタムFragmentPagerAdapterで初期化されたViewPagerのみが含まれます。このアダプターは、3つのフラグメント間のナビゲーションを提供します。
アクションバー以外はすべて正常に動作しているようです。
フラグメントのonCreateOptionsMenu()メソッドをオーバーライドして、フラグメントの個々のアクションバーを作成します。
@Override
public void onCreateOptionsMenu(Menu menu、MenuInflater inflater)
{
super.onCreateOptionsMenu(menu、inflater);
menu.clear ();
//fragment specific menu creation
}
スワイプすると、新しいフラグメントが表示されますが、アクションバーは数秒間同じままです。おそらく数秒後にこのメソッドが呼び出され、アクションバーが変更されます。
これは、スワイプが完了してからしばらくしてアクションバーが変更された場合、かなり悪く見えます。スワイプを開始する前に、すぐにアクションバーを再作成するにはどうすればよいですか?
invalidateOptionsMenu();
を呼び出すことで、自動的に行う前にAndroid=アクションバーを再作成するように依頼できます
フラグメントを変更するポイントの近くでこれを行い、フラグメントとアクションバーの変更の間の「遅れ」を減らします。
編集
完全なソリューションは次のようになります。
class activity extends Activity{
private void switchFragment(){
...do fragment changing stuff
activity.invalidateOptionsMenu();
}
}
class someFragment extends Fragment{
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
//fragment specific menu creation
}
}
どのフラグメントが
activity.invalidateOptionsMenu();
その後、そのを呼び出します
onCreateOptionsMenu
そこに特定のメニューを作成することができます
これは、onCreateOptionsMenuを実装し、各フラグメントのonAttachコールバックでsetHasOptionsMenu(true)を呼び出すことで実行でき、それに応じてアクションを変更します。
アクションなしでフラグメントを表示するにはsetHasOptionsMenu(false)
ActionBarタブを使用している場合は、次の回答をご覧ください。
最後に、これを達成するための適切な方法を見つけることができませんでした。
最善の方法は、アクションバーをアクティビティではなくフラグメントの一部にすることですが、それは不可能です。
スワイプが始まるとアクションバーのメニューとタイトルを消去し(PageViewで特別なリスナーを設定できます)、スワイプが完了して新しいフラグメントが表示されたらメニューとタイトルを再設定します。
でタイムラグが発生し、スワイプ中にアクションバーが奇妙に空に見えますが、できる限り最善です。
Android APIは...