2012-03-19 25 views
5

Estoy tratando de implementar un menú de opciones para mi aplicación y el mismo menú se usa en diferentes actividades. En el Android developers site, que dice lo siguiente:Implementación del menú de opciones una vez para varias actividades

Consejo: Si la aplicación contiene múltiples actividades y algunos de ellos proporcionar el mismo menú de opciones, considere la creación de una actividad que implementa nada, excepto el onCreateOptionsMenu() y onOptionsItemSelected() métodos. Luego, amplíe esta clase para cada actividad que debe compartir el mismo menú de opciones. De esta forma, puede administrar un conjunto de códigos para manejar las acciones del menú y cada clase descendente hereda los comportamientos del menú. Si desea agregar elementos de menú al una de las actividades descendientes, anule la función OnCreateOptionsMenu() en . Llame a super.onCreateOptionsMenu (menú) para que se creen los elementos de menú originales , luego agregue nuevos elementos de menú con menu.add(). Usted también puede anular el comportamiento de la superclase para los elementos de menú individuales .

Mis actividades se extienden de Activity, ListActivity o MapActivity, entonces ¿cuál sería la forma correcta de implementar lo que están sugiriendo aquí? ¿Es posible? Debido a que no puedo extender esta nueva clase para todos estos, solo pude hacer algo como Public Abstract. BaseMenu extends Activity (como se explica en this question) pero esto no me funciona. Entonces me pregunto si hay un trabajo alrededor que pueda implementar.

Gracias de antemano

+0

+1 por su buena pregunta. –

Respuesta

2

para esa clase de menú base común que necesitan extender la clase MapActivity. Entonces puede extender esa clase de menú base común para todas las actividades.

Para esa ListActivity también puede implementar la lista sin ListActivity, puede implementarla solo por Activity o MapActivity.

tienes que declarar listview en el archivo xml con la identificación como a continuación.

<ListView 
      android:id="@+id/listView" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"/> 

Luego tiene que declararlo en su clase de actividad.

ListView listView = (ListView)findViewById(R.id.listView); 
listView.setAdapter(your adapter); 

Como anteriormente, puede implementarlo sin extender ListActivity.

+0

¿Es una buena forma de utilizar MapActivity en lugar de Activity si no se requiere Map en alguna actividad? Creo que consume más memoria. –

+1

Como sé, el mapa no se implementa sin la actividad del mapa, por lo que para la opción del menú base común esta es la forma adecuada. –

1

no se puede usar mapview sin ampliar la clase de clase de actividad .... remitir esto ... MapView without MapActivity ... por lo que debe dejar que su clase base amplíe la actividad del mapa ... y para la actividad usando listview ... ponga listview en xml y usted puede usarlo en su actividad ..

0

me gustaría crear una clase estática MenuProvider que implementa su onCreateOptionsMenu() y onOptionItemsSelected() métodos estáticamente a ser llamado desde onCreateOptionsMenu() y onOptionsItemsSelected() de las actividades, así:

public static class MenuProvider { 

    // You can pass it the activity and other variables used by this method if 
    // you need to. 
    // Since the implementation is the same across all activities, they should 
    // pass the same variables. 
    public static void onCreateOptionsMenu(MenuItem item, Activity callingActivity, ...) 
     ... // Do stuff on create 
    } 

    public static void onOptionItemsSelected(MenuItem item, Activity callingActivity, ...) 
     ... // Do stuff on item select 
    } 
} 

Y en cada una de sus actividades es, usted haría:

public class MyMapActivity extends MapActivity { 
    ... 

    public void onCreateOptionsMenu(MenuItem item) 
     MenuProvider.onCreateOptionsMenu(item, this, ... /*other variables */); 
    } 

    public static void onOptionItemsSelected(MenuItem item) 
     MenuProvider.onOptionItemsSelected(item, this, ... /*other variables */); 
    } 

    ... 
} 
+0

Gracias, no sé por qué no pensé en esto antes :) Tal vez no es tan elegante como las otras implementaciones sugeridas, pero creo que es más fácil y menos desordenado ya que no he programado en Android tanto. – marimaf

+0

Las implementaciones para onCreateOptionMenu y onOptionItemsSelected implementan cosas como Intents por ejemplo. He extendido MenuProvider desde Activity pero luego me arroja un error para el modificador static en esos métodos. – marimaf

Cuestiones relacionadas