2011-04-17 7 views
10

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?

Respuesta

11

Puede intentar usar android:menuCategory y android:orderInCategory para especificar más manualmente su pedido.

O use onPrepareOptionsMenu() en HostActivity, como se llama después de onCreateOptionsMenu(). Lo malo es que se invoca cada vez que se presiona un botón MENU, no solo la primera vez.

+0

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. –

+0

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 :( –

+12

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

Cuestiones relacionadas