Android: ¿Cómo tener un menú compartida en cada actividad (Lista) sin volver a escribir los métodos reemplazados?

StackOverflow https://stackoverflow.com/questions/2006457

Pregunta

Sé que Android ofrece algunos métodos útiles para ser anulado con el fin de definir un menú:

    @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  menu.add(0, AIS, 0, "Activity Inventory Sheet").setIcon(android.R.drawable.ic_menu_upload);
                // ...
  return true;
 }

 public boolean onOptionsItemSelected(MenuItem item) {
  Intent i;
     switch (item.getItemId()) {
     case AIS: i = new Intent(this, ActivityInventorySheet.class);
      startActivity(i);
               return true;
     // ...
     }
     return false;
 }

Me gustaría tener este menú compartida por cada actividad y ListActivity de mi aplicación Android. Esto es para tener un menú estándar en cada actividad (Lista) que permite al usuario ir a cualquier parte de la solicitud en un clic.

En este momento, la manera más fácil de lograrlo es copiar y pegar ambos métodos en cada (Lista) Actividad de la aplicación. No me gusta esta redundancia del código escrito:)

es sub-clasificar a una elección razonable? Ya he visto que (hilos que recuperar objetos de una base de datos están dando problemas) sub-clasificar a uno de mis ListActivity no funciona muy bien. ¿Hay otras maneras de compartir un menú a través de actividades?

Gracias

¿Fue útil?

Solución

No veo ninguna razón esto no funcionaría a la perfección:

public abstract class MyListActivity extends ListActivity
{
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      menu.add(0, AIS, 0, "Activity Inventory Sheet").setIcon(android.R.drawable.ic_menu_upload);
      // ...
      return true;
   }

   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
      Intent i;
      switch (item.getItemId()) {
          case AIS: i = new Intent(this, ActivityInventorySheet.class);
          startActivity(i);
          return true;
          // ...
      }
      return false;
   }    
}

A continuación, sólo tienen sus actividades se extienden MyListActivity en lugar de ListActivity.

  

Ya he visto que subclasificar   uno de mis ListActivity no funciona   muy bien (hilos que recuperan   objetos de una base de datos están dando   problemas).

Esto suena como un problema completamente diferente. Es posible que desee enviar una pregunta separada con respecto a este. Simplemente extendiendo una clase en Java no debería crear ningún problema como el que usted está describiendo.

Otros consejos

Yo uso una clase de ayuda con los métodos estáticos para inicializar y manejar las opciones de menú comunes, entonces cada Actividad define su propio onCreateOptionsMenu etc., que delega tareas comunes a la clase de ayuda, y puede añadir más elementos de menú específicos de esa actividad.

Algo así como

class SharedMenu {
    public static void onCreateOptionsMenu(Menu menu) {
        menu.add(...);
        menu.add(...);
    }
}

public class MyActivity extends Activity {

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        menu.add(...);  // specific to this activity
        SharedMenu.onCreateOptionsMenu(menu);
        return true;
    }

}

con más métodos para onMenuItemSelected etc.

Edit: No estoy usando una clase base común, ya que necesitaría dos de ellos para empezar, uno para las actividades y otra para las actividades de la lista, y luego en mi caso tengo que añadir opciones de menú personalizado en algunos actividades.

He añadido una función para GreenDroid para manejar eso. Puede ser muy útil, comprobar que funciona. Voy a tratar de publicar un ejemplo más adelante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top