2010-03-27 47 views
0

我有一個對話框彈出窗口來指示我想要運行一個活動的時間。 似乎很簡單,但很難確定活動何時開始。 如果用戶在G1上打開鍵盤並進入橫向,則會重新執行onCreate方法的活動。應用程序生命週期。如何僅在應用程序啓動時運行某些操作

我不能爲該類創建靜態,甚至不能創建應用程序類,因爲我無法確定「應用程序」何時消失。即使在破壞唯一的活動後,應用程序顯然仍然活着。

有沒有方法可以確定onCreate是因爲鍵盤被擴展或橫向模式調用而被調用的?

感謝

回答

3

我試着創建一個應用程序的子類,但我仍然無法確定它何時會消失。

我試過另一種方法。 我在清單中添加的活動中,

android:configChanges="orientation|keyboardHidden" 

然後在活動範圍內我加入,

public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
} 

這導致我的onCreate方法沒有被調用時的方向變化或鍵盤被隱藏。我不確定爲什麼我的觀點在任何一種情況下看起來都是正確的,但是效果很好。事實上,它甚至可以處理輸入到顯示的對話框中的文本。方向改變時文本保持不變。

+0

這是最好的方法。通過添加行android:configChanges =「...「你已經告訴Android,在這種情況下,它不需要重新開始活動,只需重新繪製它們(實際上很少有人知道這個功能很有趣 - 我知道直到最近才知道 - 但是這是一個簡單的解決方案!)順便說一下,如果這種技術解決了您的問題,您能否將自己的答案標記爲「已接受」?這會將此問題從未解決問題的列表中刪除。 – 2010-03-27 12:01:41

0

有沒有辦法來確定 的onCreate被稱爲因 正在擴展鍵盤或 風景模式調用?

有一種辦法:
1.檢查鍵盤正在擴展
2.一種方法來檢查當前的方向(橫向或縱向)

確定的onCreate()是否已經所謂或不需要你的一些工作。例如,你可以有一個變量來標記onCreate()的完成並將它保存在Activity的狀態包中。

您可以通過檢查onCreate()來確定這是第一次運行還是由於配置更改而重新啓動,通過從1,2和標誌的值中取出某些意義。

這只是一個建議;可能存在更好的解決方案

3

在onSaveInstanceState中,您可以存儲一個標誌,指示它是否已經運行。如果應用程序正在恢復,然後在onCreate(Bundle savedInstanceState)中,savedInstanceState將具有該變量,因此您可以檢查savedInstanceState!= null和saveInstanceState.get(「restoreoring」)!= null,然後不顯示對話框。

+0

+10 (你的回答)讓我們有兩種:) – Samuh 2010-03-27 04:05:17

+0

但問題是我不知道爲什麼它消失了。可能是因爲系統停止了活動,或者用戶或方向改變了。我真正需要的是知道這是因爲改變方向而發生的。 – David 2010-03-27 06:14:56

相關問題