2010-05-05 45 views
10

工作有没有使用这样的事情会显示活动后,任何其他方法来调用openOptionsMenu:的Android - openOptionsMenu不在的onCreate

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

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

编辑:我将不胜感激例如这样的:

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

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

这种解决方案确实相当脆弱 – Casebash 2010-05-15 05:17:16

回答

21

我在Activity再次看了看,它已经有方法onAttachedToWindow,从Window.Callback继承,因为API级别为5.如果使用此级别,则只需在Activity中覆盖此方法。

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

如果您使用的是之前的5.0版本,那么你必须重写onAttachedToWindow method in View代替。如果您的代码中创建了View,这非常简单。如果它是在XMl中创建的,那么它并不那么难 - 你应该找到instructions here有帮助。

+0

而且我应该在哪里插入此覆盖,因为活动没有onAttachedToWindow? – kape123 2010-05-14 14:48:03

+1

@ kape123:我添加了额外的信息。我希望这有助于 – Casebash 2010-05-15 04:55:57

+0

你能给我完整的例子吗?提前致谢! – kape123 2010-05-18 15:38:46

-1

我的解决方案

//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

...这是我已经发布在我的问题 – kape123 2011-02-11 19:26:20

+0

嘿,你试过吗?我在市场上使用它在我自己的应用程序中。 – RubyDeveloper 2011-02-15 04:17:08

+0

在启动/加载过程中使用基于计时器的调度通常是一种糟糕的做法,特别是如果您可以使用专用回调。 – ohaleck 2013-07-21 16:39:35