私の質問は、プログラムで作成したツールバーの menuItem (サブメニュー付きのメニュー) が、フラグメントが再開するたびに xml レイアウトでオーバーライドされるのをどのように防ぐことができるかということです。高価なツールバーのメニュー項目を作成したいのは、フラグメントが初めて作成されたときだけであり、再開時ではありません。
onCreateOptionsMenu() でツールバーを拡張し、メニュー項目のインスタンスを保存します。
private MenuItem menuItem;
プライベート サブメニュー expessiveSubmenu;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_layout, menu);
menuItem= menu.findItem(R.id.menuItem);
}
非同期ローダーが終了すると、menuItem に値が設定されます。
@Override
public void onLoadFinished(Loader<> loader, Data data) {
//Expensive call
expensiveSubmenu= makeExpensiveSubMenu(menuItem, data);
}
これで、メニューが完全に読み込まれ、ツールバーに表示され、サブメニューのインスタンスも作成されました。
フラグメントが再開されるたびに onCreateOptionsMenu() が呼び出されるため、メニューが xml レイアウトでオーバーライドされ、高価なサブメニューを再度作成する必要があります。menu.addSubmenu(Menu) のようなメソッドは私のニーズを解決しますが、見つけることができませんでした。どんなアイデアでも大歓迎です。