0

私の質問は、プログラムで作成したツールバーの 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) のようなメソッドは私のニーズを解決しますが、見つけることができませんでした。どんなアイデアでも大歓迎です。

4

0 に答える 0