10

バックグラウンド

Android 3.0用に開発しているので、HostActivityとのスーパークラスであるがNotebooksActivityありNoteActivityます。NotebooksActivityフラグメントを含みますNotebooksFragment

にはHostActivity、アクションバーのオプションメニューの右端に表示するメニューを含めます。つまり、のサブクラスのすべてのメニュー項目は、でHostActivity追加したメニュー項目の左側に表示する必要がありますHostActivity

メニューのインフレHostActivity

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    final MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.host_menu, menu);
    return super.onCreateOptionsMenu(menu);
}

問題

にメニュー項目を追加NoteActivityすると、期待どおりの順序になります。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.notebook_menu, menu);
    return super.onCreateOptionsMenu(menu);
}

ただし、にメニュー項目を追加するとNotebooksFragment、フラグメントの動作によりonCreateOptionsMenu、の同じメソッドの後に呼び出され、HostActivityメニュー項目がの前に表示されますHostActivityNotebooksFragment

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.notebooks_menu, menu);
    SearchView sv = new SearchView(getActivity());
    sv.setOnQueryTextListener(this);
    menu.findItem(R.id.search_notebooks).setActionView(sv);

    super.onCreateOptionsMenu(menu, inflater);
}

どうすれば希望のメニュー注文を達成できますか?

4

1 に答える 1

11

を使用android:menuCategoryandroid:orderInCategoryて、より手動で注文を指定してみてください。

または、で使用onPrepareOptionsMenu()します。HostActivityこれは、の後に呼び出されonCreateOptionsMenu()ます。欠点は、最初だけでなく、MENUボタンを押すたびに呼び出されることです。

于 2011-04-17T23:33:49.233 に答える