AntecedentesDiferencias de ordenación de menú debido a la jerarquía de Fragmentos y Actividad. (OnCreateOptionsMenu)
desarrollo para Android 3.0, tengo una HostActivity
que es la superclase de NotebooksActivity
y NoteActivity
. NotebooksActivity
incluye un fragmento, NotebooksFragment
.
En HostActivity
, que incluyen un menú que yo quiero que aparezca en el extremo más a la derecha del menú de opciones en la Barra de acciones, es decir, todos los elementos del menú en subclases de HostActivity
deben aparecer a la izquierda de los elementos de menú agregados en HostActivity
.
inflación Menú en HostActivity
:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
final MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.host_menu, menu);
return super.onCreateOptionsMenu(menu);
}
El problema
Al agregar elementos de menú en NoteActivity
, que lograr el fin deseado como se esperaba:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.notebook_menu, menu);
return super.onCreateOptionsMenu(menu);
}
Sin embargo, cuando agrego elementos de menú en NotebooksFragment
, debido a cómo Fragmentos trabajo, onCreateOptionsMenu
se llama después del mismo método en HostActivity
, dando como resultado HostActivity
elementos del menú que aparecen antes de NotebooksFragment
.
@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);
}
¿Cómo puedo lograr que mi pedido de menú deseado?
Probé el método onPrepareOptionsMenu(), y funcionó. Sin embargo, me llamaron dos veces en mi Xoom por alguna razón, así que tuve que agregar un código adicional para evitar duplicados. –
He resuelto este problema, usando 'android: menuCategory' y' android: orderInCategory'. Traté de agregar los elementos del menú del fragmento por código, pero no funcionó, así que me vi obligado a usar un menú XML :( –
Para mí fue suficiente agregar 'android: menuCategory =" secondary "' a los elementos de la actividad que debería aparecer al final del mehu. No se requiere un atributo de ordenación adicional. – sven