2010-05-05 40 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