2010-05-05 18 views
10

¿Hay alguna otra forma de llamar a openOptionsMenu después de que aparezca la actividad sin necesidad de utilizar algo como esto:Android - openOptionsMenu no funciona en onCreate

 
new Handler().postDelayed(new Runnable() { 
      public void run() { 
       openOptionsMenu(); 
      } 
     }, 1000); 

Referencia: http://groups.google.com/group/android-beginners/browse_frm/thread/b10a8ea840c07725/1ce48bb147a3ed1a?#1ce48bb147a3ed1a

EDIT: Agradecería ejemplo como este:

 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Now I guess something like Window.Callback.onAttachedToWindow(...) should be done? 
} 
+0

Esta solución es realmente muy frágil – Casebash

Respuesta

21

Miré a Activity de nuevo, y que ha tenido el método onAttachedToWindow, heredado de Window.Callback, desde el nivel de API 5. Si está utilizando este nivel, simplemente tiene que anular este método en su Activity.

@Override 
public void onAttachedToWindow() { 
    super.onAttachedToWindow(); 
    openOptionsMenu(); 
} 

Si está utilizando una versión anterior a 5, entonces usted tiene que anular el onAttachedToWindow method in View lugar. Esto es muy fácil si su View se crea en código. Si se crea en XMl, entonces no es mucho más difícil, debería encontrar el instructions here útil.

+0

Y dónde debería insertar este aumento de presupuesto, ya que la actividad no tiene onAttachedToWindow? – kape123

+1

@ kape123: Agregué información adicional. Espero que esto ayude – Casebash

+0

¿Puedes darme un ejemplo completo? ¡Gracias por adelantado! – kape123

-1

Mi solución

//Open menu manually from code 
    Timer timing = new Timer(); 
    timing.schedule(new TimerTask() { 

       /** 
       * {@inheritDoc} 
       */ 
       @Override 
       public void run() { 

        runOnUiThread(new Runnable() { 

         @Override 
         public void run() { 
          openOptionsMenu(); 
         } 
        }); 

       } 
      }, 1000); 
+0

... esa es la peor versión del código que ya publiqué en mi pregunta – kape123

+0

hey, ¿lo intentó? Lo estoy usando en mi propia aplicación en el mercado. – RubyDeveloper

+0

En general, es una mala práctica utilizar la programación basada en temporizador durante el inicio/carga, especialmente si puede utilizar una devolución de llamada dedicada. – ohaleck